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

使用带自定义映射的ce.OrdinalEncoder调用inverse_transform报错如何解决

问题解决方法

报错根因

category_encoders库的OrdinalEncoder在执行逆转换时,要求传入的自定义映射规则为pandas.Series类型。你当前传入的是普通Python字典,字典不存在index属性,因此触发了AttributeError。

解决方案1:修改自定义映射格式

仅需将你定义的映射字典转为pd.Series类型即可兼容逆转换逻辑,修改后完整可运行代码如下:

import pandas as pd
import category_encoders as ce

lst = [ 'BRANCHING/ELONGATION', 'EARLY', 'EARLY', 'EARLY', 'EARLY', 'MID', 'MID',  'ADVANCED/TILLERING',
        'FLOWERING', 'FLOWERING', 'FLOWERING', 'SEEDLING/EMERGED']
filtered_df = pd.DataFrame(lst, columns =['growth_state'])

# 将映射规则转为pd.Series
custom_mapping = [{'col': 'growth_state',
               'mapping': pd.Series({'SEEDLING/EMERGED':0, 'EARLY':1, 'MID':2,
                          'ADVANCED/TILLERING':3, 'BRANCHING/ELONGATION':4, 'FLOWERING':5 })}]

encoder = ce.OrdinalEncoder(cols = 'growth_state', mapping= custom_mapping)
filtered_df['growth_state'] = encoder.fit_transform(filtered_df['growth_state'])

# 逆转换可正常运行
newCol = encoder.inverse_transform(filtered_df['growth_state'])

解决方案2:使用sklearn自带OrdinalEncoder

如果不需要额外依赖category_encoders库,也可以直接使用sklearn原生的有序编码器,指定分类顺序即可实现相同效果:

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder

lst = [ 'BRANCHING/ELONGATION', 'EARLY', 'EARLY', 'EARLY', 'EARLY', 'MID', 'MID',  'ADVANCED/TILLERING',
        'FLOWERING', 'FLOWERING', 'FLOWERING', 'SEEDLING/EMERGED']
filtered_df = pd.DataFrame(lst, columns =['growth_state'])

# 按业务逻辑指定分类的先后顺序
custom_order = [['SEEDLING/EMERGED', 'EARLY', 'MID', 'ADVANCED/TILLERING', 'BRANCHING/ELONGATION', 'FLOWERING']]
encoder = OrdinalEncoder(categories=custom_order)

# sklearn要求输入为二维数组,因此用两层方括号包裹列名
filtered_df['growth_state'] = encoder.fit_transform(filtered_df[['growth_state']])

# 逆转换
newCol = encoder.inverse_transform(filtered_df[['growth_state']])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:04