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

使用TimeseriesGenerator时触发KeyError:96的问题排查

问题根源分析与解决方法

核心问题

出现KeyError:96的根本原因并非列名无效,而是**TimeseriesGenerator在处理pandas DataFrame时,误将行位置索引当作DataFrame的标签索引使用**。

具体原因

当你把pandas DataFrame直接传入TimeseriesGenerator时,生成器内部会尝试通过整数位置(比如96)来切片获取数据,但DataFrame的索引默认是标签索引而非位置索引:

  • 如果你的数据集索引不是从0开始的连续整数(比如是时间戳、字符串或存在缺失的整数索引),生成器找不到标签为96的行,就会抛出KeyError。
  • 即便索引是整数,若中间有缺失(比如删除过行导致索引不连续),同样会触发该错误。

验证方式

可以先检查数据集的索引是否为连续的0-based整数:

print(columns.index)
# 快速验证索引是否连续且从0开始
print(columns.index.is_unique and columns.index.is_monotonic_increasing and columns.index[0] ==0 and columns.index[-1]==len(columns)-1)

解决方法

有两种简单的修复方式:

方法1:将DataFrame转换为numpy数组

把输入数据和目标数据都转为numpy数组后再传入生成器:

# 修改生成器初始化代码
generator = TimeseriesGenerator(columns[data_columns].values, columns[prediction_columns].values, length=n_input, batch_size=b_size)

方法2:重置DataFrame的索引

如果需要保留DataFrame格式,可以先重置索引为连续整数:

# 重置索引(drop=True避免原索引成为新列)
columns = columns.reset_index(drop=True)
# 再初始化生成器
generator = TimeseriesGenerator(columns[data_columns], columns[prediction_columns], length=n_input, batch_size=b_size)

额外注意点

你的代码中prediction_columns生成了43个列(range(43)),但你提到数据集只有42个输出列,这里可能存在列名不匹配的问题,建议确认:

# 检查prediction_columns是否都在数据集列中
missing_cols = [col for col in prediction_columns if col not in columns.columns]
print("缺失的列:", missing_cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:58