首页 > 解决方案 > AttributeError:“OrdinalEncoder”对象没有属性“category_mapping”

问题描述

当我使用以下功能时,我得到AttributeError.

from category_encoders import OrdinalEncoder

def label_encode(input_data, col):
    name = col +'_encoded'
    encoder = OrdinalEncoder(return_df=True, handle_unknown='ignore')
    input_data[name] = encoder.fit_transform(input_data[col].values).values - 1
    encoder = dict(encoder.category_mapping[0]['mapping'])
    return input_data, encoder, name

标签: scikit-learncategoriesencoderordinal

解决方案


如果它没有出现在列表中,您能否检查是否category_mapping在运行时dir(encoder)显示,您可能使用的是编码器的 sklearn 版本而不是 scikit-learn-contrib OrdinalEncoder。

当我运行dir(encoder)命令时,会出现 category_mapping 属性:

[ ...
 'category_mapping',
 'cols',
 'drop_cols',
 'drop_invariant',
 'feature_names',
 'fit',
 'fit_transform',
 'get_feature_names',
 'get_params',
 'handle_missing',
 'handle_unknown',
 'inverse_transform',
 'mapping',
 'ordinal_encoding',
 'return_df',
 'set_params',
 'transform',
 'verbose']

如果您运行此代码段,它应该显示映射:

from category_encoders import *
import pandas as pd
from sklearn.datasets import load_boston
bunch = load_boston()
y = bunch.target
X = pd.DataFrame(bunch.data, columns=bunch.feature_names)
enc = OrdinalEncoder(cols=['CHAS', 'RAD']).fit(X, y)
numeric_dataset = enc.transform(X)
enc.category_mapping[0]['mapping']
0.0    1
1.0    2
NaN   -2
dtype: int64

推荐阅读