使用数据读取器时的InstantDeprecationError

时间:2018-07-09 11:11:31

标签: python datareader stock pandas-datareader

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
style.use('ggplot')
start = dt.datetime(2000,1,1)
end = dt.datetime(2016,12,31)

df = web.DataReader('INPX', 'yahoo', start, end) 


ImmediateDeprecationError                 Traceback (most recent call last)
<ipython-input-11-d0b9e16fb581> in <module>()
----> 1 df = web.DataReader('INPX', 'yahoo', start, end)

/anaconda3/lib/python3.6/site-packages/pandas_datareader/data.py in DataReader(name, data_source, start, end, retry_count, pause, session, access_key)
289     """
290     if data_source == "yahoo":
--> 291         raise ImmediateDeprecationError(DEP_ERROR_MSG.format('Yahoo Daily'))
292         return YahooDailyReader(symbols=name, start=start, end=end,
293                                 adjust_price=False, chunksize=25,

ImmediateDeprecationError: 
Yahoo Daily has been immediately deprecated due to large breaks in the API without the
introduction of a stable replacement. Pull Requests to re-enable these data
connectors are welcome.

See https://github.com/pydata/pandas-datareader/issues

我尝试了链接,但是找不到立即折旧错误的原因。我还尝试将'yahoo'更改为'google',即:df = web.DataReader('INPX','google',开始,结束),但仍然存在错误:

/anaconda3/lib/python3.6/site-packages/pandas_datareader/google/daily.py:40: UnstableAPIWarning: 
The Google Finance API has not been stable since late 2017. Requests seem
to fail at random. Failure is especially common when bulk downloading.

warnings.warn(UNSTABLE_WARNING,UnstableAPIWarning)

RemoteDataError                           Traceback (most recent call last)
<ipython-input-12-5d16a3e9b68a> in <module>()
----> 1 df = web.DataReader('INPX', 'google', start, end)

/anaconda3/lib/python3.6/site-packages/pandas_datareader/data.py in DataReader(name, data_source, start, end, retry_count, pause, session, access_key)
313                                  chunksize=25,
314                                  retry_count=retry_count, pause=pause,
--> 315                                  session=session).read()
316 
317     elif data_source == "iex":

/anaconda3/lib/python3.6/site-packages/pandas_datareader/base.py in read(self)
204         if isinstance(self.symbols, (compat.string_types, int)):
205             df = self._read_one_data(self.url,
--> 206                                      params=self._get_params(self.symbols))
207         # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
208         elif isinstance(self.symbols, DataFrame):

/anaconda3/lib/python3.6/site-packages/pandas_datareader/base.py in _read_one_data(self, url, params)
 82         """ read one data from specified URL """
 83         if self._format == 'string':
---> 84             out = self._read_url_as_StringIO(url, params=params)
 85         elif self._format == 'json':
 86             out = self._get_response(url, params=params).json()

/anaconda3/lib/python3.6/site-packages/pandas_datareader/base.py in _read_url_as_StringIO(self, url, params)
 93         Open url (and retry)
 94         """
---> 95         response = self._get_response(url, params=params)
 96         text = self._sanitize_response(response)
 97         out = StringIO()

/anaconda3/lib/python3.6/site-packages/pandas_datareader/base.py in _get_response(self, url, params, headers)
153             msg += '\nResponse Text:\n{0}'.format(last_response_text)
154 
--> 155         raise RemoteDataError(msg)
156 
157     def _get_crumb(self, *args):

RemoteDataError: Unable to read URL: https://finance.google.com/finance/historical?q=INPX&startdate=Jan+01%2C+2000&enddate=Dec+31%2C+2016&output=csv
Response Text:

b'sorry ... body {字体家族:verdana,arial,sans-serif;背景颜色:#fff;颜色:#000; } Google 抱歉...

很抱歉...

...,但是您的计算机或网络可能正在发送自动查询。为了保护我们的用户,我们暂时无法处理您的请求。

有关详细信息,请参见Google Help

Google Home'。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

here中讨论的一个小改动对我有用。只需使用

import pandas_datareader.data as web
sp500 = web.get_data_yahoo('SPY', start=start, end=end)

答案 1 :(得分:1)

错误是不言自明的; Yahoo API已更改,因此从Yahoo API读取的旧的Pandas代码不再起作用。您是否已阅读this discussion有关API更改及其对熊猫的影响的信息?本质上,Pandas无法读取新的Yahoo API,并且将花费很长时间来编写新代码,因此临时解决方案是每次有人尝试将Pandas用于Yahoo API时都引发ImmediateDeprecationError。 / p>