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

在Scikit-learn中对多列同属性特征执行一致的Label Encoding

如何在Scikit-learn中对多列特征执行统一的Label Encoding

这问题我碰到过好多次了,要实现多列中相同取值的编码一致,关键是不能单独对每列训练编码器,而是要让编码器先学习所有列的共同类别集合。下面给你一步步实现:

核心思路

我们需要先把所有涉及的列(Origin和Destination)的取值合并,让LabelEncoder学习所有可能的类别,之后再用这个训练好的编码器分别转换每一列,这样就能保证同一个取值在不同列的编码完全一致。

具体实现步骤

1. 导入所需库

import pandas as pd
from sklearn.preprocessing import LabelEncoder

2. 构造原始数据

先把你的数据转换成Pandas DataFrame,方便后续处理:

# 原始数据
data = {
    'Origin': ['China', 'China', 'USA', 'USA', 'USA', 'Russia'],
    'Destination': ['USA', 'Turkey', 'China', 'Turkey', 'Russia', 'China']
}
df = pd.DataFrame(data)

3. 训练统一的LabelEncoder

合并两列的所有取值,提取唯一类别后训练编码器:

# 合并Origin和Destination的所有值,获取全部唯一类别
all_unique_categories = pd.concat([df['Origin'], df['Destination']]).unique()

# 初始化编码器并拟合所有类别
label_encoder = LabelEncoder()
label_encoder.fit(all_unique_categories)

4. 转换目标列

用训练好的编码器分别转换Origin和Destination列:

# 对两列进行编码转换
df['Origin_encoded'] = label_encoder.transform(df['Origin'])
df['Destination_encoded'] = label_encoder.transform(df['Destination'])

5. 查看结果

运行以下代码就能得到你想要的统一编码结果:

print(df[['Origin_encoded', 'Destination_encoded']])

输出结果示例:

Origin_encoded  Destination_encoded
0               0                    3
1               0                    2
2               3                    0
3               3                    2
4               3                    1
5               1                    0

(注:编码数字可能和你示例中的略有不同,取决于类别排序,但同一取值的编码在两列是完全一致的)

为什么不能单独编码?

如果分别对每列调用LabelEncoder().fit_transform(),每列的编码器是独立训练的。比如Origin列的China可能被编码为0,但Destination列的China可能因为该列的类别顺序不同被编码为其他值,模型会把这两个相同的取值当成不同的特征,完全不符合我们的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:27