Create your own transformer

Feature-engine, a Python library for feature engineering

1 min read

Published Oct 3 2025


10
0
0
0

Feature EngineeringFeature-engineMachine LearningPandasPythonscikit-learnTransformers

Sometimes there will be situations where a transformer isn't available for a task you want to apply to the data. It is very straightforward to implement your own transformer by inheriting from the base classes.


Example where a fit, method is required to learn a parameter:

from sklearn.base import BaseEstimator, TransformerMixin

# Define three methods for the class: _init_, fit and transform
# The fit_transform() will be inherited since it is using BaseEstimator and TransformerMixin

# Define the transformer, and inherit the base classes
class MyCustomTransformerForMaxImputation(BaseEstimator, TransformerMixin):

  # Here, you define the variables you need to parse when you initialise the class
  def __init__(self, variables):
    # Make sure the variables will be a list, even if only one element
    if not isinstance(variables, list):
      self.variables = [variables]
    else: self.variables = variables

  # Carry out the learning from the data here, in this case, the max value
  def fit(self, X, y=None):
   
    # We want to keep the max value in a dictionary
    self.imputer_dict_ = {}
      
    # loop over each variable, calculate the max and save it in the dictionary.
    for feature in self.variables:
        self.imputer_dict_[feature] = X[feature].max()
    
    return self

  # Transform the variables based on what you learned in the .fit()
  def transform(self, X):
    # loop over the variables and .fillna() in a given feature based on the max of a given feature
    for feature in self.variables:
      X[feature].fillna(self.imputer_dict_[feature], inplace=True)
      
    return X

This example stores the max value of a column, and then when it transforms, it applies that learnt max value to all the missing values.



Example where a fit, method is not required to learn a parameter:

from sklearn.base import BaseEstimator, TransformerMixin

class ConvertTitleCase(BaseEstimator, TransformerMixin):
  def __init__(self, variables):
    if not isinstance(variables, list):
      self.variables = [variables]
    else: self.variables = variables

  # The fit method is just there to ensure compatibility with sklearn pipelines
  def fit(self, X, y=None):
      return self

  # The transform method where the actual transformation takes place
  def transform(self, X):
    for feature in self.variables:
      if X[feature].dtype == 'object':
        X[feature] = X[feature].apply(lambda x: x.title())
      else:
        print(f"Warning: {feature} data type should be object to use ConvertTitleCase()")

    return X

This example still implements the fit() method so it is compatible with scikit-learn, however it just returns self and doesn't do any action. The transform function changes any text to title case, to make the first character of each word a capital letter.


Products from our shop

Docker Cheat Sheet - Print at Home Designs

Docker Cheat Sheet - Print at Home Designs

Docker Cheat Sheet Mouse Mat

Docker Cheat Sheet Mouse Mat

Docker Cheat Sheet Travel Mug

Docker Cheat Sheet Travel Mug

Docker Cheat Sheet Mug

Docker Cheat Sheet Mug

Vim Cheat Sheet - Print at Home Designs

Vim Cheat Sheet - Print at Home Designs

Vim Cheat Sheet Mouse Mat

Vim Cheat Sheet Mouse Mat

Vim Cheat Sheet Travel Mug

Vim Cheat Sheet Travel Mug

Vim Cheat Sheet Mug

Vim Cheat Sheet Mug

SimpleSteps.guide branded Travel Mug

SimpleSteps.guide branded Travel Mug

Developer Excuse Javascript - Travel Mug

Developer Excuse Javascript - Travel Mug

Developer Excuse Javascript Embroidered T-Shirt - Dark

Developer Excuse Javascript Embroidered T-Shirt - Dark

Developer Excuse Javascript Embroidered T-Shirt - Light

Developer Excuse Javascript Embroidered T-Shirt - Light

Developer Excuse Javascript Mug - White

Developer Excuse Javascript Mug - White

Developer Excuse Javascript Mug - Black

Developer Excuse Javascript Mug - Black

SimpleSteps.guide branded stainless steel water bottle

SimpleSteps.guide branded stainless steel water bottle

Developer Excuse Javascript Hoodie - Light

Developer Excuse Javascript Hoodie - Light

Developer Excuse Javascript Hoodie - Dark

Developer Excuse Javascript Hoodie - Dark

© 2025 SimpleSteps.guide
AboutFAQPoliciesContact