使用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
相关产品推荐
相关产品推荐

