A library of sklearn compatible categorical variable encoders
See the codeA set of scikit-learn-style transformers for encoding categorical variables into numeric by means of different techniques.
Documentation: http://contrib.scikit-learn.org/category_encoders/
Unsupervised:
Supervised:
The package requires: numpy, statsmodels, and scipy.
To install the package, execute:
$ python setup.py install
or
pip install category_encoders
or
conda install -c conda-forge category_encoders
To install the development version, you may use:
pip install --upgrade git+https://github.com/scikit-learn-contrib/category_encoders
All of the encoders are fully compatible sklearn transformers, so they can be used in pipelines or in your existing scripts. Supported input formats include numpy arrays and pandas dataframes. If the cols parameter isn't passed, all columns with object or pandas categorical data type will be encoded. Please see the docs for transformer-specific configuration options.
There are two types of encoders: unsupervised and supervised. An unsupervised example:
from category_encoders import *
import pandas as pd
# prepare some data with categorical features
X = pd.DataFrame({
'gender': ['male', 'female', 'female', 'male', 'female'],
'country': ['US', 'UK', 'US', 'CA', 'UK'],
'age': [25, 32, 47, 51, 38],
})
# use binary encoding to encode two categorical features
enc = BinaryEncoder(cols=['gender', 'country']).fit(X)
# transform the dataset
numeric_dataset = enc.transform(X)
And a supervised example:
from category_encoders import *
import pandas as pd
# prepare some training and test data with categorical features and a target
X_train = pd.DataFrame({
'gender': ['male', 'female', 'female', 'male'],
'country': ['US', 'UK', 'US', 'CA'],
})
y_train = pd.Series([1, 0, 1, 0])
X_test = pd.DataFrame({
'gender': ['female', 'male'],
'country': ['UK', 'US'],
})
# use target encoding to encode two categorical features
enc = TargetEncoder(cols=['gender', 'country'])
# transform the datasets
training_numeric_dataset = enc.fit_transform(X_train, y_train)
testing_numeric_dataset = enc.transform(X_test)
For the transformation of the training data with the supervised methods, you should use fit_transform() method instead of fit().transform(), because these two methods do not have to generate the same result. The difference can be observed with LeaveOneOut encoder, which performs a nested cross-validation for the training data in fit_transform() method (to decrease over-fitting of the downstream model) but uses all the training data for scoring with transform() method (to get as accurate estimates as possible).
Furthermore, you may benefit from following wrappers:
Additional examples and benchmarks can be found in the examples directory.
Category encoders is under active development, if you'd like to be involved, we'd love to have you. Check out the CONTRIBUTING.md file or open an issue on the github project to get started.
Overall
Maintained
Code review
Latest release
Releases this year
644 followers · starred Nov 2020
2,861 followers · starred Jun 2017
87 followers · starred Feb 2026
541 followers · starred Feb 2022
A library of sklearn compatible categorical variable encoders
See the codeA set of scikit-learn-style transformers for encoding categorical variables into numeric by means of different techniques.
Documentation: http://contrib.scikit-learn.org/category_encoders/
Unsupervised:
Supervised:
The package requires: numpy, statsmodels, and scipy.
To install the package, execute:
$ python setup.py install
or
pip install category_encoders
or
conda install -c conda-forge category_encoders
To install the development version, you may use:
pip install --upgrade git+https://github.com/scikit-learn-contrib/category_encoders
All of the encoders are fully compatible sklearn transformers, so they can be used in pipelines or in your existing scripts. Supported input formats include numpy arrays and pandas dataframes. If the cols parameter isn't passed, all columns with object or pandas categorical data type will be encoded. Please see the docs for transformer-specific configuration options.
There are two types of encoders: unsupervised and supervised. An unsupervised example:
from category_encoders import *
import pandas as pd
# prepare some data with categorical features
X = pd.DataFrame({
'gender': ['male', 'female', 'female', 'male', 'female'],
'country': ['US', 'UK', 'US', 'CA', 'UK'],
'age': [25, 32, 47, 51, 38],
})
# use binary encoding to encode two categorical features
enc = BinaryEncoder(cols=['gender', 'country']).fit(X)
# transform the dataset
numeric_dataset = enc.transform(X)
And a supervised example:
from category_encoders import *
import pandas as pd
# prepare some training and test data with categorical features and a target
X_train = pd.DataFrame({
'gender': ['male', 'female', 'female', 'male'],
'country': ['US', 'UK', 'US', 'CA'],
})
y_train = pd.Series([1, 0, 1, 0])
X_test = pd.DataFrame({
'gender': ['female', 'male'],
'country': ['UK', 'US'],
})
# use target encoding to encode two categorical features
enc = TargetEncoder(cols=['gender', 'country'])
# transform the datasets
training_numeric_dataset = enc.fit_transform(X_train, y_train)
testing_numeric_dataset = enc.transform(X_test)
For the transformation of the training data with the supervised methods, you should use fit_transform() method instead of fit().transform(), because these two methods do not have to generate the same result. The difference can be observed with LeaveOneOut encoder, which performs a nested cross-validation for the training data in fit_transform() method (to decrease over-fitting of the downstream model) but uses all the training data for scoring with transform() method (to get as accurate estimates as possible).
Furthermore, you may benefit from following wrappers:
Additional examples and benchmarks can be found in the examples directory.
Category encoders is under active development, if you'd like to be involved, we'd love to have you. Check out the CONTRIBUTING.md file or open an issue on the github project to get started.
Overall
Maintained
Code review
Latest release
Releases this year
644 followers · starred Nov 2020
2,861 followers · starred Jun 2017
87 followers · starred Feb 2026
541 followers · starred Feb 2022