问题描述
如果我只调用一种加密货币它有效,但对于多个它却失败了。
import pandas_datareader as pdr
...
crypto_df = pdr.DataReader('BTC-USD',data_source = 'yahoo',start = '2015-01-01')
工作正常
crypto_df = pdr.DataReader('ETH-USD',start = '2015-01-01')
也很好用
crypto_df = pdr.DataReader(['BTC-USD','ETH-USD'],start = '2015-01-01')
失败并出现以下错误:
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "/home/alex/.local/lib/python3.8/site-packages/pandas/util/_decorators.py",line 199,in wrapper
return func(*args,**kwargs)
File "/home/alex/.local/lib/python3.8/site-packages/pandas_datareader/data.py",line 376,in DataReader
return YahooDailyReader(
File "/home/alex/.local/lib/python3.8/site-packages/pandas_datareader/base.py",line 258,in read
df = self._dl_mult_symbols(self.symbols)
File "/home/alex/.local/lib/python3.8/site-packages/pandas_datareader/base.py",line 285,in _dl_mult_symbols
result = concat(stocks,sort=True).unstack(level=0)
File "/home/alex/.local/lib/python3.8/site-packages/pandas/core/frame.py",line 7349,in unstack
result = unstack(self,level,fill_value)
File "/home/alex/.local/lib/python3.8/site-packages/pandas/core/reshape/reshape.py",line 417,in unstack
return _unstack_frame(obj,fill_value=fill_value)
File "/home/alex/.local/lib/python3.8/site-packages/pandas/core/reshape/reshape.py",line 444,in _unstack_frame
return _Unstacker(
File "/home/alex/.local/lib/python3.8/site-packages/pandas/core/reshape/reshape.py",line 118,in __init__
self._make_selectors()
File "/home/alex/.local/lib/python3.8/site-packages/pandas/core/reshape/reshape.py",line 167,in _make_selectors
raise ValueError("Index contains duplicate entries,cannot reshape")
这对股票按预期工作,但对加密货币无效。
我相信这不是我的问题,但我希望有人可以确认。如果这是一个未知的错误,我会向开发人员开一张票。
解决方法
您需要定义要获取的索引。
#Trying to fetch crypto data from yahoo
from pandas_datareader import data as wb
tickers = ['BTC-USD','ETH-USD']
crypto_data = pd.DataFrame()
for t in tickers:
crypto_data[t] = wb.DataReader(t,data_source ='yahoo',start= '2020-12-01')['Adj Close']
在这种情况下,您缺少 ['Adj Close']
。