Kaggle数据集Pandas代码报错KeyError:无法识别'Sex'列
解决Pandas中'Sex'列的KeyError问题
问题排查和修复步骤
移除features里的'ID'
读取数据时你指定了index_col='ID',这会把ID设为DataFrame的索引,不再是普通数据列。features列表里保留'ID'会导致X = df[features]报错,先把它删掉。确认列名完全一致
运行print(df.columns.tolist())输出所有实际列名,检查'Sex'的写法和你代码里的是否完全匹配——比如有没有前后空格、大小写差异(比如'SEX'或' Sex')。如果列名带空格,要么重命名列,要么代码里用带空格的列名(比如df[' Sex'])。修正特征与目标变量的逻辑
你现在把'Sex'当预测目标Y,同时又把它放进特征X里,这属于用目标变量自己做特征,逻辑完全错误。建议换一个合理的目标变量,比如预测睡眠障碍('Sleep_Disorder'),同时把'Sex'从features中移除(如果用它做特征,就不能当目标)。检查映射后的缺失值
映射操作如果遇到字典里没有的取值,会生成NaN,后续模型训练可能出问题。执行以下代码检查:print(df['Sex'].isna().sum()) print(df['Occupation'].isna().sum())如果有NaN,要么补充字典的键值对覆盖所有可能取值,要么用
fillna填充未知值,比如:df['Sex'] = df['Sex'].map(a).fillna(-1)
修正后的代码示例
import pandas from sklearn import tree from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt # 读取数据,ID设为索引 df = pandas.read_csv("Data.csv", sep=";", index_col='ID') # 修正features:移除ID,不包含目标变量 features = ['Age','Occupation','Sleep_Duration','Quality_of_Sleep','Physical_Activity_Level','Stress_Level','BMI_Category','Systolic_Blood_Pressure','Diastolic_Blood_Pressure','Heart_Rate','Daily_Steps'] # 目标变量改为睡眠障碍(可根据需求调整) target = 'Sleep_Disorder' # 先确认列名是否正确 print("当前数据列名:", df.columns.tolist()) # 映射分类变量,同时处理缺失值 gender_map = {'Male': 1, 'Female': 0} df['Sex'] = df['Sex'].map(gender_map).fillna(-1) occupation_map = {'Nurse': 0, 'Software Engineer': 1, 'Doctor': 2, 'Sales Representative': 3, 'Teacher': 4, 'Engineer': 5, 'Accountant': 6, 'Scientist': 7, 'Lawyer': 8, 'Salesperson': 9, 'Manager': 10} df['Occupation'] = df['Occupation'].map(occupation_map).fillna(-1) bmi_map = {'Normal': 1, 'Overweight': 0, 'Obese': 2} df['BMI_Category'] = df['BMI_Category'].map(bmi_map).fillna(-1) sleep_disorder_map = {'None': 0, 'Sleep_Apnea': 1, 'Insomnia': 2} df[target] = df[target].map(sleep_disorder_map).fillna(-1) # 准备特征和目标变量 X = df[features] Y = df[target] # 训练决策树并绘图 dtree = DecisionTreeClassifier() dtree.fit(X, Y) tree.plot_tree(dtree, feature_names=features) plt.show() # 显示决策树图像
内容的提问来源于stack exchange,提问作者Skalar
相关产品推荐
相关产品推荐

