如何从经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
相关产品推荐
相关产品推荐

