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

如何从经LabelEncoder编码的数据集中获取原始非数值型值?

解决LabelEncoder编码后查看原始国家名称的问题

你的问题出在每次循环都新建了LabelEncoder实例,却没保存每个列对应的编码器,导致编码后没法逆向映射回原始值。下面给你两种实用的解决办法:

方法一:保存每个列的编码器(推荐)

编码时用字典把每个列的LabelEncoder实例存下来,之后就能随时逆查原始值:

from sklearn.preprocessing import LabelEncoder

# 初始化字典,用来存每个列的编码器
col_encoders = {}
# 遍历需要编码的列
for col in columns:
    le = LabelEncoder()
    # 对当前列编码并替换原数据
    data[col] = le.fit_transform(data[col])
    # 把当前列的编码器存入字典
    col_encoders[col] = le

查看native-country的原始名称计数

拿到编码后的计数结果后,用对应的编码器把数值索引转成原始国家名:

# 获取编码后的数值计数
encoded_counts = data['native-country'].value_counts()
# 将数值索引转换为原始国家名称
original_country_counts = encoded_counts.rename(
    index=lambda code: col_encoders['native-country'].inverse_transform([code])[0]
)
print(original_country_counts)

单独查看某个编码对应的原始国家

比如想知道编码2对应的国家:

print(col_encoders['native-country'].inverse_transform([2]))

方法二:编码前备份原始列

如果已经完成编码但没保存编码器,且原始数据还能获取的话,可以重新加载原始数据,或者在编码前提前备份目标列:

# 编码前先备份native-country列
data['native-country_raw'] = data['native-country'].copy()

# 执行你原来的编码代码
le = LabelEncoder()
for i in columns:
    data[i] = le.fit_transform(data[i])

之后直接查看备份列的计数即可:

data['native-country_raw'].value_counts()

注意事项

LabelEncoder是按单个列生成映射关系的,不同列的编码数值对应的原始值完全独立,所以必须为每个编码列单独保存编码器,不能共用一个实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:20:32