Я использую pandas_datareader.data для получения цен на акции, но для некоторых акций (BFB) недостаточно данных, и я получаю следующее исключение. Я хотел бы знать, как отловить это исключение, я использовал RemoteDataError, indexError
и DataError
, но он не работает, и я не хочу рассматривать его как общее исключение.
KeyError Traceback (most recent call last)
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2896 try:
-> 2897 return self._engine.get_loc(key)
2898 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-24-3794b07996e9> in <module>()
5 END_DATE = '2020-04-30'
6 try:
----> 7 web.get_data_yahoo('BFB', START_DATE, END_DATE)
8 except RemoteDataError:
9 pass
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas_datareader\data.py in get_data_yahoo(*args, **kwargs)
80
81 def get_data_yahoo(*args, **kwargs):
---> 82 return YahooDailyReader(*args, **kwargs).read()
83
84
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas_datareader\base.py in read(self)
249 # If a single symbol, (e.g., 'GOOG')
250 if isinstance(self.symbols, (string_types, int)):
--> 251 df = self._read_one_data(self.url, params=self._get_params(self.symbols))
252 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
253 elif isinstance(self.symbols, DataFrame):
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas_datareader\yahoo\daily.py in _read_one_data(self, url, params)
163 prices1 = 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:
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2993 if self.columns.nlevels > 1:
2994 return self._getitem_multilevel(key)
-> 2995 indexer = self.columns.get_loc(key)
2996 if is_integer(indexer):
2997 indexer = [indexer]
C:\ProgramData\Anaconda3\envs\ml_finance\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2897 return self._engine.get_loc(key)
2898 except KeyError:
-> 2899 return self._engine.get_loc(self._maybe_cast_indexer(key))
2900 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
2901 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'