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

问题描述

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

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",'Sector'])
     17     for i in tickers['Symbol'][0:100]:
---> 18         df = web.DataReader(i,end)
     19         df.drop(['High',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,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,['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,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'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)