使用Pandas DataReader从Alpha Vantage提取股票数据时出错

时间:2020-01-20 16:33:18

标签: python-3.x pandas pandas-datareader alphavantage

我正在尝试从Alpha Vantage收集股票数据,但是我一直遇到错误?我正在使用Alpha Vantage提取数据。我的代码如下:

import pandas_datareader.data as web
import pandas as pd
import numpy as np
import datetime

start = datetime.datetime(2006,1,1)
end = datetime.datetime(2016,1,1)
BAC = web.DataReader('BAC', 'av-daily', start, end,api_key='****')
C = web.DataReader('C', 'av-daily', start, end,api_key='****')
GS = web.DataReader('GS', 'av-daily', start, end,api_key='****')
JPM = web.DataReader('JPM', 'av-daily', start, end,api_key='****')
MS = web.DataReader('MS', 'av-daily', start, end,api_key='****')
WFC = web.DataReader('WFC', 'av-daily', start, end,api_key='****')

其中的星号表示我来自Alpha Vantage的API密钥。运行此命令时,出现以下错误:

KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas_datareader\av\__init__.py in _read_lines(self, out)
     71         try:
---> 72             df = pd.DataFrame.from_dict(out[self.data_key], orient="index")
     73         except KeyError:

KeyError: 'Time Series (Daily)'

During handling of the above exception, another exception occurred:

RemoteDataError                           Traceback (most recent call last)
<ipython-input-37-4c470c35e03d> in <module>
      3 BAC = web.DataReader('BAC', 'av-daily', start, end,api_key='JLUM6QNSDCL3OHTU')
      4 C = web.DataReader('C', 'av-daily', start, end,api_key='JLUM6QNSDCL3OHTU')
----> 5 GS = web.DataReader('GS', 'av-daily', start, end,api_key='JLUM6QNSDCL3OHTU')
      6 JPM = web.DataReader('JPM', 'av-daily', start, end,api_key='JLUM6QNSDCL3OHTU')
      7 MS = web.DataReader('MS', 'av-daily', start, end,api_key='JLUM6QNSDCL3OHTU')

~\Anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)
    206                 else:
    207                     kwargs[new_arg_name] = new_arg_value
--> 208             return func(*args, **kwargs)
    209 
    210         return wrapper

~\Anaconda3\lib\site-packages\pandas_datareader\data.py in DataReader(name, data_source, start, end, retry_count, pause, session, api_key)
    577             pause=pause,
    578             session=session,
--> 579             api_key=api_key,
    580         ).read()
    581 

~\Anaconda3\lib\site-packages\pandas_datareader\base.py in read(self)
     98         """Read data from connector"""
     99         try:
--> 100             return self._read_one_data(self.url, self.params)
    101         finally:
    102             self.close()

~\Anaconda3\lib\site-packages\pandas_datareader\base.py in _read_one_data(self, url, params)
    110         else:
    111             raise NotImplementedError(self._format)
--> 112         return self._read_lines(out)
    113 
    114     def _read_url_as_StringIO(self, url, params=None):

~\Anaconda3\lib\site-packages\pandas_datareader\av\time_series.py in _read_lines(self, out)
    103 
    104     def _read_lines(self, out):
--> 105         data = super(AVTimeSeriesReader, self)._read_lines(out)
    106         # reverse since alphavantage returns descending by date
    107         data = data[::-1]

~\Anaconda3\lib\site-packages\pandas_datareader\av\__init__.py in _read_lines(self, out)
     79                 )
     80             else:
---> 81                 raise RemoteDataError()
     82         df = df[sorted(df.columns)]
     83         df.columns = [id[3:] for id in df.columns]

RemoteDataError: 

有人知道这意味着什么吗?有时我会收到此错误,而其他时候却没有?我将运行单元格,它将很好,如果几分钟后运行它,有时会出现此错误?

1 个答案:

答案 0 :(得分:2)

当数据供应商出现错误时,将引发RemoteDataError(),在这种情况下,看起来您正在使用标准API密钥。要引用the site,标准键的阈值为:

每分钟最多5个API请求,每天最多500个请求,以实现最佳的服务器端性能。如果您希望提高API调用量,请访问premium membership

所以这就是为什么它有时只起作用的原因,您达到了自由键上的速率限制。