0

我正在使用 Pandas-Datareader 通过 Yahoo Finance 从一堆 ETF 中收集数据,尽管数据似乎可用,但我在少数代码中遇到了奇怪的错误。代码非常简单:

start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2017,1,1)

for ticker in TICKERS:
     f = dr.DataReader(ticker, 'yahoo', start, end)

并且适用于我的大部分股票,但不是全部:

EMLP GDVD (Failed to get data for GDVD) AMZA RFDI ARKK ARKW SECT (Failed to get data for SECT)

EMLP 工作正常。尽管网站上提供了 GDVD 的历史数据,但 Datareader 会为GDVD 生成类似此URL 的 URL。我使用 GDVD url 在 Chrome 中看到以下错误:

{"finance": {"error": {"code": "Unauthorized","description": "Invalid cookie"}}}

有没有办法获得这些股票的历史价格?万一任何人都可以看到模式,完整的失败代码列表:

 ['GDVD', 'SECT', 'DWLD', 'CCOR', 'DFNL', 'DUSA', 'AIEQ', 'CACG', 'QSY', 'ACT', 'TAXR', 'TTAI', 'FLIO', 'FMDG', 'VGFO', 'FFSG', 'LRGE', 'YLDE', 'VESH', 'DEMS', 'SQZZ']
4

1 回答 1

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())
于 2018-01-14T20:36:27.033 回答