class_docstr: Combine multiple preprocessors into a single :py:class:`Preprocessor`.
  
  When you call ``fit``, each preprocessor is fit on the dataset produced by the
  preceeding preprocessor's ``fit_transform``.
  
  Example:
      >>> import pandas as pd
      >>> import ray
      >>> from ray.data.preprocessors import *
      >>>
      >>> df = pd.DataFrame({
      ...     "X0": [0, 1, 2],
      ...     "X1": [3, 4, 5],
      ...     "Y": ["orange", "blue", "orange"],
      ... })
      >>> ds = ray.data.from_pandas(df)  # doctest: +SKIP
      >>>
      >>> preprocessor = Chain(
      ...     StandardScaler(columns=["X0", "X1"]),
      ...     Concatenator(include=["X0", "X1"], output_column_name="X"),
      ...     LabelEncoder(label_column="Y")
      ... )
      >>> preprocessor.fit_transform(ds).to_pandas()  # doctest: +SKIP
         Y                                         X
      0  1  [-1.224744871391589, -1.224744871391589]
      1  0                                [0.0, 0.0]
      2  1    [1.224744871391589, 1.224744871391589]
  
  Args:
      preprocessors: The preprocessors to sequentially compose.
code: def __init__(self, *preprocessors: Preprocessor):
      self.preprocessors = preprocessors
  
file_path: ray/python/ray/data/preprocessors/chain.py
imports: from typing import TYPE_CHECKING
  from ray.air.util.data_batch_conversion import BatchFormat
  from ray.data import Dataset
  from ray.data.preprocessor import Preprocessor
label_desc: Use image node_id 2 to create a new Chain object from inherited base classes: Preprocessor with example: obj = Chain()