0

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
Venkatachalam
  • 16,288
  • 9
  • 49
  • 77
loadbox
  • 646
  • 14
  • 34

1 Answers1

1

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
Milton Arango G
  • 775
  • 9
  • 16
  • Exactly. I could not see the `category_mapping` attribute when I run dir(encoder). – loadbox Oct 08 '19 at 03:23
  • https://anaconda.org/conda-forge/category_encoders I installed category_encoders in my conda environment using this command `conda install -c conda-forge category_encoders`. How can I correct this mistake? – loadbox Oct 08 '19 at 03:24
  • And, to install sklearn, I used `conda install -c anaconda scikit-learn` – loadbox Oct 08 '19 at 03:25
  • 1
    The installation with conda is Ok, maybe the problem was that you were importing the OrdinalEncoder from scikit somewhere in the code and it overrides the OrdinalEncoder from category_encoders. – Milton Arango G Oct 08 '19 at 14:52
  • 1
    To be certain try ```>>> OrdinalEncoder.__module__``` It prints something like this when using the sklearn ecoder ```'sklearn.preprocessing._encoders'``` Or this when using category_encoders ```'category_encoders.ordinal'``` – Milton Arango G Oct 08 '19 at 14:55