遍历DataFrame列表转OIL PROD列float求和报KeyError解决方法
报错原因
报KeyError的本质是你这76个DataFrame里,至少有一个没有叫OIL PROD的列。大概率是列名带了看不见的前后空格、大小写不匹配,或者个别表本来就缺失这列。
另外你原来的代码还有个隐藏坑:所有列都是object类型,OIL PROD列里很可能混了非数值内容,比如表示空值的-、空字符串、零散备注文字之类的,直接调用astype("float")会触发ValueError,代码跑一半就会中断。
解决方法
- 先执行下面这段代码,把所有表的列名都打印出来,定位列名异常的表:
for idx, df in enumerate(df_clean): print(f"第{idx}个表的列名列表:{df.columns.tolist()}")
- 列名核对完成后,用下面的代码做求和计算,自动兼容列名带空格、内容含非数值、个别表缺列的场景,不会随意中断:
oil_sum = [] for df in df_clean: # 先统一标准化列名:去除前后空格、全部转为大写,对齐目标列名格式 df.columns = [col.strip().upper() for col in df.columns] if "OIL PROD" not in df.columns: # 缺列的位置可以按需替换成0或者其他填充值,这里示例填充None并打印提示 oil_sum.append(None) print(f"第{len(oil_sum)-1}个表缺失OIL PROD列,已填充None") continue # 转float时设置errors="coerce",无法转成数值的内容会自动转为空值NaN,sum计算时会自动忽略空值 single_sum = df["OIL PROD"].astype("float", errors="coerce").sum() oil_sum.append(single_sum)
- 如果核对后发现实际列名和
OIL PROD拼写不一致,把代码里对应的列名字符串替换成实际正确的列名即可。
内容的提问来源于stack exchange,提问作者Robert Tuttle
相关产品推荐
相关产品推荐

