航班票价预测ML项目数据转换报错:KeyError: 'Date_of_Journey'
航班票价预测项目:
KeyError: 'Date_of_Journey' 解决方案 问题背景
参考Krish Naik的葡萄酒质量预测端到端ML项目流程搭建航班票价预测项目时,运行03_data_transformation.ipynb中的数据转换代码触发KeyError: 'Date_of_Journey',日志显示当前读取的DataFrame已无该字段。
排查与解决步骤
1. 回溯预处理环节的字段操作
- 检查前置notebook(如
01_data_ingestion.ipynb、02_data_preprocessing.ipynb)的代码,确认是否在数据清洗、过滤、去重等操作中误删除了Date_of_Journey字段。 - 修复方式:在预处理代码中添加字段校验逻辑(如
assert 'Date_of_Journey' in df.columns);若需对该字段做衍生处理,确保先保留原始字段或完成衍生后再处理原始字段。
2. 核查数据读取逻辑
- 检查数据读取代码(如
pd.read_csv()),确认是否使用usecols参数过滤了该字段,或数据源文件本身缺失Date_of_Journey列。 - 修复方式:核对数据源文件的列名结构,确保目标字段存在;移除读取代码中不必要的列过滤参数,或明确指定包含
Date_of_Journey。
3. 修正DataTransformation类的字段引用
- 查看
DataTransformation类的代码,确认是否在转换逻辑中错误引用了Date_of_Journey,但该字段已被预处理阶段重命名或替换。 - 修复方式:将类中所有对
Date_of_Journey的引用替换为预处理后实际存在的字段名;若字段被重命名,统一使用新名称。
4. 清理缓存的中间数据
- 检查是否存在缓存的中间数据文件(如预处理后保存的csv/parquet文件),该文件可能在之前的运行中丢失了目标字段。
- 修复方式:删除缓存的中间文件,重新运行前置预处理流程,生成包含完整字段的中间数据。
调试技巧
- 在数据读取完成后,添加
print(df.columns)或df.info()语句,实时确认DataFrame的字段列表,定位字段丢失的具体环节。 - 在
DataTransformation类的转换方法开头添加校验逻辑,提前暴露问题:if 'Date_of_Journey' not in self.df.columns: raise ValueError("DataFrame缺失必填字段: Date_of_Journey")
内容的提问来源于stack exchange,提问作者Md. Ehsanul Haque Kanan
相关产品推荐
相关产品推荐

