class_docstr: Preprocess one multimodal pd.DataFrame including image paths, image bytearrays, texts, numerical features,
  and categorical features. Each modality may have multiple columns.
  The preprocessor is designed to output model-agnostic features.
class_docstr_tok: ["Preprocess","one","multimodal","pd.DataFrame","including","image","paths",",","image","bytearrays",",","texts",",","numerical","features",",","and","categorical","features",".","Each","modality","may","have","multiple","columns",".","The","preprocessor","is","designed","to","output","model-agnostic","features","."]
docstr: Fit the label column data to initialize the label encoder or scalar.
  
  Parameters
  ----------
  y
      The Label column data.
code: def _fit_y(self, y: pd.Series, X: Optional[pd.DataFrame] = None):
      """
      Fit the label column data to initialize the label encoder or scalar.
  
      Parameters
      ----------
      y
          The Label column data.
      """
      if self._fit_y_called:
          raise RuntimeError(
              "fit_y() has been called. Please create a new preprocessor and call it again!"
          )
      self._fit_y_called = True
      logger.debug(
          f'Process col "{self._label_column}" with type label'
      )
      if self.label_type == CATEGORICAL:
          self._label_generator.fit(y)
      elif self.label_type == NUMERICAL:
          y = pd.to_numeric(y).to_numpy()
          self._label_scaler.fit(np.expand_dims(y, axis=-1))
      elif (
          self.label_type == ROIS
          or self.label_type == SEMANTIC_SEGMENTATION_GT
      ):
          pass  # Do nothing. TODO: Shall we call fit here?
      elif self.label_type == NER_ANNOTATION:
          # If there are ner annotations and text columns but no NER feature columns,
          # we will convert the first text column into a ner column.
          # Added for backward compatibility for v0.6.0 where column_type is not specified.
          if len(self._ner_feature_names) == 0:
              if len(self._text_feature_names) != 0:
                  self._ner_feature_names.append(
                      self._text_feature_names.pop(0)
                  )
                  self.column_types[
                      self._ner_feature_names[0]
                  ] = TEXT_NER
              else:
                  raise NotImplementedError(
                      f"Text column is necessary for named entity recognition, however, no text column is detected."
                  )
          self._label_generator.fit(y, X[self.ner_feature_names[0]])
      else:
          raise NotImplementedError(
              f"Type of label column is not supported. Label column type={self.label_type}"
          )
  
imports: import logging
  from typing import Any, Dict, List, Optional, Tuple, Union
  import numpy
  import pandas
  from nptyping import NDArray
  from omegaconf import DictConfig, OmegaConf
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.impute import SimpleImputer
  from sklearn.pipeline import Pipeline
  from sklearn.preprocessing import MinMaxScaler, StandardScaler
  from autogluon.features import CategoryFeatureGenerator
  from ..constants import AUTOMM, CATEGORICAL, DOCUMENT, DOCUMENT_IMAGE, IDENTIFIER, IMAGE, IMAGE_BYTEARRAY, IMAGE_PATH, LABEL, NER, NER_ANNOTATION, NULL, NUMERICAL, OVD, ROIS, SEMANTIC_SEGMENTATION, SEMANTIC_SEGMENTATION_GT, SEMANTIC_SEGMENTATION_IMG, TEXT, TEXT_NER
  from .label_encoder import CustomLabelEncoder
label_desc: Use image node_id 26 for calling the MultiModalFeaturePreprocessor obj's underlying member method code with example usage: obj._fit_y(y, X) without return types