首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的代码被ValueError打破了:索引包含重复的条目,当使用yaho数据读取器时不能重塑

我的代码被ValueError打破了:索引包含重复的条目,当使用yaho数据读取器时不能重塑
EN

Stack Overflow用户
提问于 2022-03-11 10:18:48
回答 2查看 198关注 0票数 2

代码工作得很好,但是现在它在以下几行之后给出了这个错误:

代码语言:javascript
运行
复制
end = dt.datetime.now()
start = dt.date(end.year - 3, end.month, end.day)
prices = reader.get_data_yahoo(tickers,start,end)['Adj Close']

我试着升级包和所有东西,但是它没有,help.The代码现在也不起作用,即使是我以前成功下载和分析的数据也是如此。

代码语言:javascript
运行
复制
ValueError                                Traceback (most recent call last)
Input In [6], in <cell line: 3>()
      1 end = dt.datetime.now()
      2 start = dt.date(end.year - 3, end.month, end.day)
----> 3 prices = reader.get_data_yahoo(tickers,start,end)['Adj Close']

File C:\Python310\lib\site-packages\pandas_datareader\data.py:80, in get_data_yahoo(*args, **kwargs)
     79 def get_data_yahoo(*args, **kwargs):
---> 80     return YahooDailyReader(*args, **kwargs).read()

File C:\Python310\lib\site-packages\pandas_datareader\base.py:256, in _DailyBaseReader.read(self)
    254 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
    255 elif isinstance(self.symbols, DataFrame):
--> 256     df = self._dl_mult_symbols(self.symbols.index)
    257 else:
    258     df = self._dl_mult_symbols(self.symbols)

File C:\Python310\lib\site-packages\pandas_datareader\base.py:285, in _DailyBaseReader._dl_mult_symbols(self, symbols)
    283         stocks[sym] = df_na
    284 if PANDAS_0230:
--> 285     result = concat(stocks, sort=True).unstack(level=0)
    286 else:
    287     result = concat(stocks).unstack(level=0)

File C:\Python310\lib\site-packages\pandas\core\frame.py:8413, in DataFrame.unstack(self, level, fill_value)
   8351 """
   8352 Pivot a level of the (necessarily hierarchical) index labels.
   8353 
   (...)
   8409 dtype: float64
   8410 """
   8411 from pandas.core.reshape.reshape import unstack
-> 8413 result = unstack(self, level, fill_value)
   8415 return result.__finalize__(self, method="unstack")

File C:\Python310\lib\site-packages\pandas\core\reshape\reshape.py:478, in unstack(obj, level, fill_value)
    476 if isinstance(obj, DataFrame):
    477     if isinstance(obj.index, MultiIndex):
--> 478         return _unstack_frame(obj, level, fill_value=fill_value)
    479     else:
    480         return obj.T.stack(dropna=False)

File C:\Python310\lib\site-packages\pandas\core\reshape\reshape.py:501, in _unstack_frame(obj, level, fill_value)
    499 def _unstack_frame(obj, level, fill_value=None):
    500     if not obj._can_fast_transpose:
--> 501         unstacker = _Unstacker(obj.index, level=level)
    502         mgr = obj._mgr.unstack(unstacker, fill_value=fill_value)
    503         return obj._constructor(mgr)

File C:\Python310\lib\site-packages\pandas\core\reshape\reshape.py:140, in _Unstacker.__init__(self, index, level, constructor)
    133 if num_cells > np.iinfo(np.int32).max:
    134     warnings.warn(
    135         f"The following operation may generate {num_cells} cells "
    136         f"in the resulting pandas object.",
    137         PerformanceWarning,
    138     )
--> 140 self._make_selectors()

File C:\Python310\lib\site-packages\pandas\core\reshape\reshape.py:192, in _Unstacker._make_selectors(self)
    189 mask.put(selector, True)
    191 if mask.sum() < len(self.index):
--> 192     raise ValueError("Index contains duplicate entries, cannot reshape")
    194 self.group_index = comp_index
    195 self.mask = mask

ValueError: Index contains duplicate entries, cannot reshape
EN

回答 2

Stack Overflow用户

发布于 2022-03-11 11:19:05

我知道这是令人沮丧的,但就目前而言,你必须逐个阅读每一个滴答。API可能是因为Pandas的最新版本而中断的:

代码语言:javascript
运行
复制
tickers = ['AAPL', 'MSFT']
end = dt.datetime.now()
start = dt.date(end.year - 3, end.month, end.day)

data = {}
for ticker in tickers:
    data[ticker] = reader.get_data_yahoo(ticker, start, end)['Adj Close']
prices = pd.concat(data, axis=1)

输出:

代码语言:javascript
运行
复制
>>> prices
                  AAPL        MSFT
Date                              
2019-03-11   43.548748  109.345795
2019-03-12   44.038033  110.111404
2019-03-13   44.232773  110.964211
2019-03-14   44.724491  111.051437
2019-03-15   45.306278  112.330688
...                ...         ...
2022-03-07  159.300003  278.910004
2022-03-08  157.440002  275.850006
2022-03-09  162.949997  288.500000
2022-03-10  158.520004  285.589996
2022-03-10  158.520004  285.589996

[759 rows x 2 columns]
票数 1
EN

Stack Overflow用户

发布于 2022-03-26 20:00:00

当在周六或周日进行查询时,会出现此错误,因为Yahoo Finance会重复周五的数据两次。

你可以通过查看金融雅虎本身的历史数据来检查它。

对于单个股票,可以通过以下方式解决:

data = data[~data.index.duplicated(keep='last')]

但是,在下载股票列表的信息时,提出了解决方案,方法是迭代所述列表,然后将该系列连接起来以构造df。

然后,您可以使用上面的代码删除重复的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71436975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档