class_docstr: Replace missing values with imputed values.
  
  Examples:
      >>> import pandas as pd
      >>> import ray
      >>> from ray.data.preprocessors import SimpleImputer
      >>> df = pd.DataFrame({"X": [0, None, 3, 3], "Y": [None, "b", "c", "c"]})
      >>> ds = ray.data.from_pandas(df)  # doctest: +SKIP
      >>> ds.to_pandas()  # doctest: +SKIP
           X     Y
      0  0.0  None
      1  NaN     b
      2  3.0     c
      3  3.0     c
  
      The `"mean"` strategy imputes missing values with the mean of non-missing
      values. This strategy doesn't work with categorical data.
  
      >>> preprocessor = SimpleImputer(columns=["X"], strategy="mean")
      >>> preprocessor.fit_transform(ds).to_pandas()  # doctest: +SKIP
           X     Y
      0  0.0  None
      1  2.0     b
      2  3.0     c
      3  3.0     c
  
      The `"most_frequent"` strategy imputes missing values with the most frequent
      value in each column.
  
      >>> preprocessor = SimpleImputer(columns=["X", "Y"], strategy="most_frequent")
      >>> preprocessor.fit_transform(ds).to_pandas()  # doctest: +SKIP
           X  Y
      0  0.0  c
      1  3.0  b
      2  3.0  c
      3  3.0  c
  
      The `"constant"` strategy imputes missing values with the value specified by
      `fill_value`.
  
      >>> preprocessor = SimpleImputer(
      ...     columns=["Y"],
      ...     strategy="constant",
      ...     fill_value="?",
      ... )
      >>> preprocessor.fit_transform(ds).to_pandas()  # doctest: +SKIP
           X  Y
      0  0.0  ?
      1  NaN  b
      2  3.0  c
      3  3.0  c
  
  Args:
      columns: The columns to apply imputation to.
      strategy: How imputed values are chosen.
  
          * ``"mean"``: The mean of non-missing values. This strategy only works with numeric columns.
          * ``"most_frequent"``: The most common value.
          * ``"constant"``: The value passed to ``fill_value``.
  
      fill_value: The value to use when ``strategy`` is ``"constant"``.
  
  Raises:
      ValueError: if ``strategy`` is not ``"mean"``, ``"most_frequent"``, or
          ``"constant"``.
class_docstr_tok: ["Replace","missing","values","with","imputed","values",".","Examples",":",">",">",">","import","pandas","as","pd",">",">",">","import","ray",">",">",">","from","ray.data.preprocessors","import","SimpleImputer",">",">",">","df","=","pd.DataFrame","(","{","``","X","''",":","[","0",",","None",",","3",",","3","]",",","``","Y","''",":","[","None",",","``","b","''",",","``","c","''",",","``","c","''","]","}",")",">",">",">","ds","=","ray.data.from_pandas","(","df",")","#","doctest",":","+SKIP",">",">",">","ds.to_pandas","(",")","#","doctest",":","+SKIP","X","Y","0","0.0","None","1","NaN","b","2","3.0","c","3","3.0","c","The","`","``","mean","''","`","strategy","imputes","missing","values","with","the","mean","of","non-missing","values",".","This","strategy","does","n't","work","with","categorical","data",".",">",">",">","preprocessor","=","SimpleImputer","(","columns=","[","``","X","''","]",",","strategy=","''","mean","''",")",">",">",">","preprocessor.fit_transform","(","ds",")",".to_pandas","(",")","#","doctest",":","+SKIP","X","Y","0","0.0","None","1","2.0","b","2","3.0","c","3","3.0","c","The","`","``","most_frequent","''","`","strategy","imputes","missing","values","with","the","most","frequent","value","in","each","column",".",">",">",">","preprocessor","=","SimpleImputer","(","columns=","[","``","X","''",",","``","Y","''","]",",","strategy=","''","most_frequent","''",")",">",">",">","preprocessor.fit_transform","(","ds",")",".to_pandas","(",")","#","doctest",":","+SKIP","X","Y","0","0.0","c","1","3.0","b","2","3.0","c","3","3.0","c","The","`","``","constant","''","`","strategy","imputes","missing","values","with","the","value","specified","by","`","fill_value","`",".",">",">",">","preprocessor","=","SimpleImputer","(","...","columns=","[","``","Y","''","]",",","...","strategy=","''","constant","''",",","...","fill_value=","''","?","``",",","...",")",">",">",">","preprocessor.fit_transform","(","ds",")",".to_pandas","(",")","#","doctest",":","+SKIP","X","Y","0","0.0","?","1","NaN","b","2","3.0","c","3","3.0","c","Args",":","columns",":","The","columns","to","apply","imputation","to",".","strategy",":","How","imputed","values","are","chosen",".","*","``","``","mean","''","``",":","The","mean","of","non-missing","values",".","This","strategy","only","works","with","numeric","columns",".","*","``","``","most_frequent","''","``",":","The","most","common","value",".","*","``","``","constant","''","``",":","The","value","passed","to","``","fill_value","``",".","fill_value",":","The","value","to","use","when","``","strategy","``","is","``","``","constant","''","``",".","Raises",":","ValueError",":","if","``","strategy","``","is","not","``","``","mean","''","``",",","``","``","most_frequent","''","``",",","or","``","``","constant","''","``","."]
code: def __init__(
      self,
      columns: List[str],
      strategy: str = "mean",
      fill_value: Optional[Union[str, Number]] = None,
  ):
      self.columns = columns
      self.strategy = strategy
      self.fill_value = fill_value
  
      if strategy not in self._valid_strategies:
          raise ValueError(
              f"Strategy {strategy} is not supported."
              f"Supported values are: {self._valid_strategies}"
          )
  
      if strategy == "constant":
          # There is no information to be fitted.
          self._is_fittable = False
          if fill_value is None:
              raise ValueError(
                  '`fill_value` must be set when using "constant" strategy.'
              )
  
file_path: ray/python/ray/data/preprocessors/imputer.py
imports: from collections import Counter
  from numbers import Number
  from typing import Dict, List, Optional, Union
  import pandas
  from pandas.api.types import is_categorical_dtype
  from ray.data import Dataset
  from ray.data.aggregate import Mean
  from ray.data.preprocessor import Preprocessor
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 1 to create a new SimpleImputer object from inherited base classes: Preprocessor with example: obj = SimpleImputer(columns, strategy, fill_value)