使用OrdinalEncoder访问数据集Level列触发KeyError如何解决
问题描述

对DataFrame执行任何涉及Level列的操作都会触发KeyError报错,涉及的复现代码如下:
y = train['Level'] y = train[['Level']] print(Train['Level']) enc = OrdinalEncoder() enc.fit(Train['Level'])
相关报错截图:
修复方案
pandas访问列触发KeyError,按以下顺序排查即可解决:
- 先排查大小写问题
Python对变量名、列名严格大小写敏感,你的代码里混用了train和Train两个变量名,先确认读取数据集后实际赋值的变量名是全小写还是首字母大写,写错变量名会直接触发报错。 - 排查列名隐藏字符问题
绝大多数列名存在但访问报错的场景,都是列名前后带看不见的空格、制表符、换行符,比如实际列名是' Level'(前带空格)、'Level '(后带空格),和你写的'Level'无法匹配。
先执行以下代码打印全部列名,核对Level列的真实名称:
如果确认列名带多余空白字符,执行一行代码即可批量清理所有列名的前后空白:# 替换成你实际的数据集变量名 print(train.columns.tolist())train.columns = train.columns.str.strip() - 确认列是否存在于当前DataFrame
如果打印列名后找不到Level,说明你之前做列筛选、数据集拆分(比如train_test_split)的时候,误把Level列排除在了当前数据集之外,回溯之前的数据处理步骤把列加回即可。 - 修正OrdinalEncoder的传参格式
等列名问题解决后,注意OrdinalEncoder.fit()要求传入二维结构的输入,直接传入一维的train['Level'](Series结构)会触发参数错误,需要传入双中括号取列返回的二维DataFrame:enc = OrdinalEncoder() enc.fit(train[['Level']])
内容的提问来源于stack exchange,提问作者Panah
相关产品推荐
相关产品推荐

