You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:27:36