Pandas将1分钟数据重采样为15分钟时出现RangeIndex/Index错误如何解决
错误原因
- 首次报错是因为DataFrame默认使用自增数字作为索引(RangeIndex),
resample方法仅支持时间类索引,无法适配数字索引。 - 二次报错是因为你直接将原始字符串格式的
Date列设为索引,此时索引为普通字符串索引,并非pandas可识别的DatetimeIndex类型,依然不满足resample的调用要求。你单独编写的date = pd.to_datetime(data['Date'])仅生成了一个独立的时间序列变量,没有赋值给DataFrame的索引,完全没有生效。
另外你原有逻辑还存在一个隐性问题:重采样会生成行数更少的15分钟频率结果,直接将结果赋值回原1分钟频率的data表会出现大量空值,属于逻辑错误。
修正后的可运行代码
import datetime as dt import pandas as pd data = pd.read_csv('Tatasteel') # 先将Date列转换为datetime类型,再设置为索引 data['Date'] = pd.to_datetime(data['Date']) data.set_index('Date', inplace=True) # 一次性完成15分钟频率的各字段聚合,避免多次调用resample data_15min = data.resample('15Min').agg({ 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum' }) print(data_15min.head())
注意事项
如果pd.to_datetime转换时间时出现格式识别错误,可以传入format参数指定你的时间字符串格式,比如时间格式为年-月-日 时:分的话,可以写为pd.to_datetime(data['Date'], format='%Y-%m-%d %H:%M')提升转换效率和准确率。
内容的提问来源于stack exchange,提问作者Sameer
相关产品推荐
相关产品推荐

