You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pandas DataFrame特定列正确应用LabelEncoder?

修复LabelEncoder处理Pandas类别标签的问题

嘿,我来帮你揪出代码里的问题,顺便给你几个靠谱的解决写法~

你这段代码的核心问题是错误使用了df.apply()apply()需要传入一个可调用的函数(比如lambda或者自定义函数),但你直接把LabelEncoder().fit_transform(df['label'])的执行结果传进去了,这完全不符合apply的用法逻辑,而且LabelEncoder本来就是用来处理单一列的,根本不需要用apply遍历整个DataFrame。

正确写法1:直接对目标列编码(最简洁常用)

这是最直接高效的方式,直接针对label列调用fit_transform

from sklearn import preprocessing
import pandas as pd

# 加载数据集
df = pd.read_csv('dataset.csv', sep=',')

# 初始化编码器
label_encoder = preprocessing.LabelEncoder()
# 对label列拟合并编码,生成新的编码列
df['label_encoded'] = label_encoder.fit_transform(df['label'])

执行完后,你可以用label_encoder.classes_查看类别与编码的对应关系,比如:

print(label_encoder.classes_)
# 输出会是类似 ['Running', 'Standing', 'Walking', 'null'] 的顺序,对应编码0、1、2、3

特殊情况处理:如果你的"null"是缺失值(NaN)

如果数据集里的null不是字符串,而是实际的缺失值NaNLabelEncoder会直接报错,这时候需要先把缺失值填充成字符串再编码:

from sklearn import preprocessing
import pandas as pd

df = pd.read_csv('dataset.csv', sep=',')

# 先把NaN填充为字符串'null'
df['label'] = df['label'].fillna('null')

# 再进行编码
label_encoder = preprocessing.LabelEncoder()
df['label_encoded'] = label_encoder.fit_transform(df['label'])

(可选)如果非要用apply的正确写法

其实完全没必要,但如果只是想试试apply的正确用法,可以这样写:

from sklearn import preprocessing
import pandas as pd

df = pd.read_csv('dataset.csv', sep=',')

label_encoder = preprocessing.LabelEncoder()
# 先拟合所有类别
label_encoder.fit(df['label'])
# 对label列的每个元素调用transform
df['label_encoded'] = df['label'].apply(lambda x: label_encoder.transform([x])[0])

不过这种写法多了一步lambda转换,远不如直接用fit_transform高效简洁。

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

火山引擎 最新活动