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

使用sklearn LabelEncoder触发TypeError,请求排查问题及解决方法

问题分析与解决

直接报错原因:函数无返回值导致变量被赋值为None

你的l_e函数在修改DataFrame后没有返回任何值,默认返回None。执行train = l_e(train)后,train变量变成了None,后续尝试访问None['Sex']就会触发'NoneType' object is not subscriptable错误。

其他潜在问题

  • LabelEncoder无法处理缺失值:你的Embarked列包含nan,LabelEncoder.fit_transform无法直接处理空值,会抛出错误。
  • 复用同一个LabelEncoder实例:对Embarked和Sex使用同一个编码器,会导致编码器的类别映射被覆盖,编码逻辑混乱。

修复后的代码

from sklearn import preprocessing
import pandas as pd

def l_e(df):
    # 先处理Embarked列的缺失值,这里用众数填充,可按需调整
    df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()[0])
    
    # 为每个特征创建独立的LabelEncoder,避免映射冲突
    le_sex = preprocessing.LabelEncoder()
    le_embarked = preprocessing.LabelEncoder()
    
    df['Sex'] = le_sex.fit_transform(df['Sex'])
    df['Embarked'] = le_embarked.fit_transform(df['Embarked'])
    
    # 返回修改后的DataFrame
    return df

train = l_e(train)
test = l_e(test)

train

关键说明

  • 要么让函数返回修改后的DataFrame并重新赋值,要么直接原地修改后不执行train = l_e(train)这类赋值操作。
  • 缺失值必须提前处理,除了众数填充,也可以用特定字符串标记空值(比如'Unknown')后再编码。
  • 每个特征单独使用LabelEncoder,能保证不同特征的编码映射互不干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:25:19