处理加密货币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
相关产品推荐
相关产品推荐

