我使用Pandas-Datareader通过Yahoo Finance从一堆ETF收集数据,即使数据似乎可用,我也会在少数代码中收到奇怪的错误。代码非常简单:
EMLP GDVD (Failed to get data for GDVD) AMZA RFDI ARKK ARKW SECT (Failed to get data for SECT)
适用于我的大多数代码但不是全部:
{"finance": {"error": {"code": "Unauthorized","description": "Invalid cookie"}}}
EMLP工作正常。即使网站上有url for GDVD,Datareader也会生成类似historical data for GDVD的网址。我在使用GDVD网址的Chrome中看到以下错误:
['GDVD', 'SECT', 'DWLD', 'CCOR', 'DFNL', 'DUSA', 'AIEQ', 'CACG', 'QSY', 'ACT', 'TAXR', 'TTAI', 'FLIO', 'FMDG', 'VGFO', 'FFSG', 'LRGE', 'YLDE', 'VESH', 'DEMS', 'SQZZ']
有没有办法获得这些代码的历史价格?任何人都可以看到模式的失败代码的完整列表:
{{1}}
答案 0 :(得分:0)
使用yahoo_fin包,我能够获取您列出的代码的数据。请查看此链接:http://theautomatic.net/yahoo_fin-documentation/。
我的代码如下所示:
from yahoo_fin.stock_info import get_data
tickers = ['GDVD', 'SECT', 'DWLD', 'CCOR', 'DFNL', 'DUSA', 'AIEQ', 'CACG',
'QSY', 'ACT', 'TAXR', 'TTAI', 'FLIO', 'FMDG', 'VGFO', 'FFSG',
'LRGE', 'YLDE', 'VESH', 'DEMS', 'SQZZ']
stocks = {}
for ticker in tickers:
stocks[ticker] = get_data(ticker)
因此,数据存储在字典中,其中键是代码,值是包含每个股票数据的数据框。
或者,您可以使用字典理解,如下所示:
stocks = {ticker : get_data(ticker) for ticker in tickers}
如果要将所有数据集折叠到单个数据框中,可以使用functools包,如下所示:
from functools import reduce
combined = reduce(lambda x,y: x.append(y), stocks.values())