Search code examples
scikit-learncategoriesencoderordinal

AttributeError: 'OrdinalEncoder' object has no attribute 'category_mapping'


When I use the following function, I get the 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

Solution

  • Could you check if category_mapping shows up when you run dir(encoder) if it does not appears in the list you might be using the sklearn version of the encoder instead of the scikit-learn-contrib OrdinalEncoder.

    When I run the dir(encoder) command the category_mapping attribute appears:

    [ ...
     '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']
    

    If you run this snippet it should display the mapping:

    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