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

同一数据集两类分类数据编码出错:OneHotEncoder逆变换失败的解决

解决OneHotEncoder重复拟合导致逆变换失败的问题

问题出在你复用了同一个OneHotEncoder实例——当你用它第二次调用fit_transform处理Issue列时,编码器内部存储的REASON NO列的类别映射信息会被完全覆盖,后续再对reason_no_enc做逆变换,编码器已经找不到对应的原始类别,自然报错。

给你两种可行的解决办法:

1. 为每一列单独创建编码器实例

给需要编码的每一列分配独立的OneHotEncoder,确保各自的类别信息互不干扰:

from sklearn.preprocessing import OneHotEncoder

# 处理REASON NO列
enc_reason = OneHotEncoder()
reason_no_enc = enc_reason.fit_transform(temp['REASON NO'].values.reshape(-1, 1)).toarray()

# 处理Issue列
enc_issue = OneHotEncoder()
issue_enc = enc_issue.fit_transform(temp['Issue'].values.reshape(-1, 1)).toarray()

之后逆变换时,直接用对应列的编码器即可:

# 还原REASON NO列的原始数据
original_reason = enc_reason.inverse_transform(reason_no_enc)
# 还原Issue列的原始数据
original_issue = enc_issue.inverse_transform(issue_enc)

2. 一次性编码多列(推荐)

如果需要同时处理多列,可以直接把目标列传入编码器统一拟合,这样编码器会保留所有列的类别信息:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 选择需要编码的两列
target_cols = temp[['REASON NO', 'Issue']]
enc = OneHotEncoder()
# 一次性拟合并编码所有目标列
combined_enc = enc.fit_transform(target_cols).toarray()

# 逆变换还原所有原始列数据
original_data = enc.inverse_transform(combined_enc)
# 转为DataFrame方便查看
original_df = pd.DataFrame(original_data, columns=['REASON NO', 'Issue'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:07