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

Pandas转索引为DatetimeIndex后resample仍报RangeIndex错误

报错原因

报错根源是KNNImputer.fit_transform()的返回值是不带索引信息的NumPy数组。你在构建填充后的DataFrame ts_data_d时,仅传入了列名参数columns=ts_data_w.columns,没有同步传入原有的时间索引,导致ts_data_d自动生成了从0开始计数的默认RangeIndex,不满足resample要求的DatetimeIndex/TimedeltaIndex/PeriodIndex索引条件。
你之前对ts_data_w做的DatetimeIndex转换本身是有效的,但索引信息在KNN填充的转换步骤中被丢弃了,和你之前做的索引类型转换操作没有关系。

修复方案

任选以下一种方式修改即可:

  • 方案1:构造填充后DataFrame时直接传入原时间索引
    修改KNN填充部分的代码,在pd.DataFrame参数中补充index配置:
# KNN缺失值填充
imputer_knn = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')
ts_data_d = pd.DataFrame(
    imputer_knn.fit_transform(ts_data_w),
    columns=ts_data_w.columns,
    index=ts_data_w.index # 保留原DatetimeIndex
)

修改后ts_data_d会直接继承ts_data_w的时间索引,后续月度重采样代码可正常运行。

  • 方案2:填充完成后补设时间索引
    如果不想修改DataFrame构造逻辑,可在KNN填充完成后、重采样代码之前,补充一行索引赋值代码:
ts_data_d.index = ts_data_w.index

最终效果和方案1完全一致。

额外优化提示

你代码中多次重复执行ts_data.index = pd.DatetimeIndex(ts_data.index)属于冗余操作:pd.date_range()生成的对象本身就是标准DatetimeIndex类型,reindex操作后ts_data_w的索引已经是合法的时间类型索引,不需要重复做类型转换,后续做数据转换时注意保留索引即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:54:47