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: Preprocess ground-truth labels by using CustomLabelEncoder to generate class labels for
  classification tasks or using StandardScaler to standardize numerical values
  (z = (x - mean) / std) for regression tasks. This function needs to be called
  preceding the label processor in "process_label.py".
  
  Parameters
  ----------
  df
      The multimodal pd.DataFrame.
  
  Returns
  -------
  labels
      All the labels (a dictionary of np.ndarray).
  label_types
      The label column types.
code: def transform_label(
      self,
      df: pd.DataFrame,
  ) -> Tuple[Dict[str, NDArray], Dict[str, str]]:
      """
      Preprocess ground-truth labels by using CustomLabelEncoder to generate class labels for
      classification tasks or using StandardScaler to standardize numerical values
      (z = (x - mean) / std) for regression tasks. This function needs to be called
      preceding the label processor in "process_label.py".
  
      Parameters
      ----------
      df
          The multimodal pd.DataFrame.
  
      Returns
      -------
      labels
          All the labels (a dictionary of np.ndarray).
      label_types
          The label column types.
      """
      assert (
          self._fit_called or self._fit_y_called
      ), "You will need to first call preprocessor.fit_y() before calling preprocessor.transform_label."
      y_df = df[self._label_column]
      if self.label_type == CATEGORICAL:
          y = self._label_generator.transform(y_df).astype(np.int64)
      elif self.label_type == NUMERICAL:
          y = pd.to_numeric(y_df).to_numpy()
          y = self._label_scaler.transform(np.expand_dims(y, axis=-1))[
              :, 0
          ].astype(np.float32)
      elif (
          self.label_type == ROIS
          or self.label_type == SEMANTIC_SEGMENTATION_GT
      ):
          y = y_df.to_list()
      elif self.label_type == NER_ANNOTATION:
          y = self._label_generator.transform(y_df)
      else:
          raise NotImplementedError
  
      return {self._label_column: y}, {
          self._label_column: 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 36 for calling the MultiModalFeaturePreprocessor obj's underlying member method code with example usage: obj.transform_label(df) and returns: dict,  dict