pandas DataFrame通过read_csv导入后列名无法识别报KeyError如何解决
问题排查步骤
- 确认变量名对应关系
你打印列名时用的是dfPNC.columns.tolist(),并非df2.columns.tolist(),大概率混淆了变量名,导致你误以为df2存在f2列。从你给出的df2.keys()返回结果可以确认,df2实际不存在f2列,反而存在你未用到的f0列,这是触发KeyError的核心原因,先打开df2对应的csv文件核对表头内容,确认是否把f2误写为f0。 - 修正列选取的语法错误
- 选取多列必须传入字符串列表,你写的
df2['f1', 'f2', 'f3', 'f4', 'f5', 'f6']等价于查找名称为('f1', 'f2', 'f3', 'f4', 'f5', 'f6')的单个元组列,和你的需求不符。 - 你后续写的
x = df2[features]逻辑错误:如果features已经是df2的切片,不需要再用df2二次索引,直接赋值即可。 - 你第三次尝试的
features = [['f1','f2', 'f3', 'f4', 'f5', 'f6', 'f7']]多了一层方括号,嵌套列表会被pandas识别为布尔掩码输入,触发类型错误,去掉外层多余的方括号使用单层列表即可。
- 选取多列必须传入字符串列表,你写的
- 排查列名隐藏字符
如果确认csv表头确实存在f2列,打印每个列名的原始字符排查空格、不可见字符:
for col in df2.columns: print(repr(col))
如果输出存在类似' f2'(带多余空格)的结果,说明列名有冗余字符,可批量清理:
df2.columns = df2.columns.str.strip()
修复后的可运行代码示例
# 导入csv时处理表头多余空格 df2 = pd.read_csv('filepath2.csv', skipinitialspace=True) # 打印df2的实际列名确认 print("df2列名:", df2.columns.tolist()) # 定义要选取的列名列表(单层列表) feature_cols = ['f1', 'f2', 'f3', 'f4', 'f5', 'f6'] target_col = 't' # 提前校验列是否存在,避免运行报错 missing_cols = [col for col in feature_cols + [target_col] if col not in df2.columns] if missing_cols: print(f"df2缺失以下列:{missing_cols}") else: x = df2[feature_cols] y = df2[target_col]
内容的提问来源于stack exchange,提问作者human2
相关产品推荐
相关产品推荐

