code: def fit_transform(self, X, y=None):
          
  
          self.label_encoders = [None] * X.shape[1]
          self.label_maxes = [None] * X.shape[1]
  
          for i, col in enumerate(X.columns):
              self.label_encoders[i], self.label_maxes[i] = \
                  self._get_label_encoder_and_max(X[col])
  
              X.loc[:, col] = X[col].fillna(NAN_INT).map(self.label_encoders[i]).fillna(0)
  
          return X
docs: Encode categorical columns into label encoded columns
  
          Args:
              X (pandas.DataFrame): categorical columns to encode
  
          Returns:
              X (pandas.DataFrame): label encoded columns