尝试为S&P 500创建数据框时出现KeyError:“日期”

时间:2020-11-03 20:33:44

标签: python pandas dataframe datetime yahoo-finance

因此,我正在尝试为标准普尔中的每个公司创建数据框。这是到目前为止的代码:

import pandas as pd
import pandas_datareader as web
import datetime as dt
from datetime import date
import numpy as np

data = []
#Get the asset data
def get_data():
    start = dt.datetime(2020, 9, 30)
    end = date.today()
    csv_file = pd.read_csv(os.path.expanduser("/Users/benitocano/Downloads/copyOfSandP500.csv"), delimiter = ',')
    tickers = pd.read_csv("/Users/benitocano/Downloads/copyOfSandP500.csv", delimiter=',', names = ['Symbol', 'Name', 'Sector'])
    for i in tickers['Symbol'][0:100]:
        df = web.DataReader(i, 'yahoo', start, end)
        df.drop(['High', 'Low', 'Open', 'Close', 'Volume'], axis=1, inplace=True)
        data.append(df)

当我索引前100家或以上的公司时,该代码将正常工作。我得到的错误是:KeyError: 'Date'。我认为这是因为标准普尔500指数中增加了一家新公司而引起的。但是我找不到没有至少3个月数据的新公司。为什么会发生此错误? 谢谢! 完整错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2645             try:
-> 2646                 return self._engine.get_loc(key)
   2647             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Date'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-100-b1ba6beb8cbb> in <module>
     31 #             non_stationary.append(i)
     32 
---> 33 get_data()
     34 # ADF_Test()
     35 

<ipython-input-100-b1ba6beb8cbb> in get_data()
     16     tickers = pd.read_csv("/Users/benitocano/Downloads/copyOfSandP500.csv", delimiter=',', names = ['Symbol', 'Name', 'Sector'])
     17     for i in tickers['Symbol'][0:100]:
---> 18         df = web.DataReader(i, 'yahoo', start, end)
     19         df.drop(['High', 'Low', 'Open', 'Close', 'Volume'], axis=1, inplace=True)
     20         data.append(df)

~/opt/anaconda3/lib/python3.8/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    212                 else:
    213                     kwargs[new_arg_name] = new_arg_value
--> 214             return func(*args, **kwargs)
    215 
    216         return cast(F, wrapper)

~/opt/anaconda3/lib/python3.8/site-packages/pandas_datareader/data.py in DataReader(name, data_source, start, end, retry_count, pause, session, api_key)
    374 
    375     if data_source == "yahoo":
--> 376         return YahooDailyReader(
    377             symbols=name,
    378             start=start,

~/opt/anaconda3/lib/python3.8/site-packages/pandas_datareader/base.py in read(self)
    251         # If a single symbol, (e.g., 'GOOG')
    252         if isinstance(self.symbols, (string_types, int)):
--> 253             df = self._read_one_data(self.url, params=self._get_params(self.symbols))
    254         # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
    255         elif isinstance(self.symbols, DataFrame):

~/opt/anaconda3/lib/python3.8/site-packages/pandas_datareader/yahoo/daily.py in _read_one_data(self, url, params)
    163         prices = DataFrame(data["prices"])
    164         prices.columns = [col.capitalize() for col in prices.columns]
--> 165         prices["Date"] = to_datetime(to_datetime(prices["Date"], unit="s").dt.date)
    166 
    167         if "Data" in prices.columns:

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2798             if self.columns.nlevels > 1:
   2799                 return self._getitem_multilevel(key)
-> 2800             indexer = self.columns.get_loc(key)
   2801             if is_integer(indexer):
   2802                 indexer = [indexer]

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2646                 return self._engine.get_loc(key)
   2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2650         if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Date'

0 个答案:

没有答案