You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理加密货币BTC-USD行情数据报ValueError错误是什么原因

问题排查与修复

报错原因

ValueError: cannot reindex a non-unique index with a method or limit报错的核心原因是:你拉取的BTC-USD数据的日期索引存在重复值,调用resample('M').ffill()时,pandas要求重采样的源索引必须唯一才能执行向前填充操作。

加密货币属于7*24小时交易品类,雅虎金融API返回日频加密货币数据时,偶尔会因为时区校准偏差、数据源重复补录、接口返回异常等问题,出现同一个日期对应多条行情记录的情况,导致返回的DataFrame索引不唯一。你可以执行print(data.index.is_unique)验证,若输出为False即可确认该问题。

修复代码

在计算收益率前先对源数据按索引去重即可,修改后代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader as web

data= web.get_data_yahoo("BTC-USD",
                        start = "2015-01-01",
                        end = "2021-01-01")

# 按日期索引去重,保留第一条有效记录
data = data[~data.index.duplicated(keep='first')]

btc_dailly_return= data['Adj Close'].pct_change()
btc_monthly_returns = data['Adj Close'].resample('M').ffill().pct_change()

如果后续需要补全所有缺失的自然日行情,可以在去重后额外增加一行data = data.asfreq('D').ffill()。

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:39:05