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

使用scikit-learn LabelEncoder转换分类变量遇TypeError错误求助

问题根源分析

从你给出的数据类型(dtypes)和报错信息来看,你踩了个LabelEncoder的常见小坑:var_mod列表里包含了已经标记为int64类型的Gender和Married列。

虽然dtypes显示这两列是数值类型,但实际数据里大概率混合了字符串和数值(比如有的行是"Male",有的是1;或是用字符串"NA"填充的缺失值)。LabelEncoder在拟合这类混合类型数据时,会因为没法直接比较字符串和整数,抛出TypeError: '<' not supported between instances of 'str' and 'int'的错误。

解决方案

1. 先确认混合类型问题

先打印这两列的唯一值,验证是不是真的存在类型混合:

print("Gender列唯一值:", data_train['Gender'].unique())
print("Married列唯一值:", data_train['Married'].unique())

如果输出里同时出现字符串(比如"Female"、"No")和数字,那就能确定问题所在了。

2. 修正分类变量列表

根据你的dtypes,真正需要用LabelEncoder处理的是object类型的列,所以调整var_mod列表:

var_mod = ['Dependents', 'Education', 'Self_Employed', 'Property_Area', 'Loan_Status']

再重新运行你的编码代码,应该就能正常执行了。

3. 如果需要重新编码Gender和Married

如果你确实要对这两列做编码,先把它们统一转换成字符串类型,再进行编码:

# 先统一转换为字符串类型
for col in ['Gender', 'Married']:
    data_train[col] = data_train[col].astype(str)

# 再执行编码逻辑
le = LabelEncoder()
for i in var_mod + ['Gender', 'Married']:
    data_train[i] = le.fit_transform(data_train[i])
额外提示
  • LabelEncoder更适合处理目标变量(比如你的Loan_Status),如果是特征变量,优先考虑OneHotEncoder(无顺序分类)或OrdinalEncoder(有顺序分类),避免给无顺序的分类变量引入不必要的顺序关系。
  • 处理数据前,一定要结合unique()和dtypes一起检查,不要只看dtypes——有时候dtypes显示数值类型,但实际藏着字符串格式的缺失值或异常值。

内容的提问来源于stack exchange,提问作者MM3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:33