code: def placeholder_imputer(
      df: pd.DataFrame,
      columns_to_impute: List[str],
      placeholder_value: Any = -999,
  ) -> LearnerReturnType:
      """
      Fills missing values with a fixed value.
  
      Parameters
      ----------
  
      df : pandas.DataFrame
          A Pandas' DataFrame with columns to fill missing values.
          It must contain all columns listed in `columns_to_impute`
  
      columns_to_impute : List of strings
          A list of names of the columns for filling missing value.
  
      placeholder_value : Any, (default=-999)
          The value used to fill in missing values.
      """
  
      def p(new_data_set: pd.DataFrame) -> pd.DataFrame:
          new_cols = (
              new_data_set[columns_to_impute]
              .fillna(placeholder_value)
              .to_dict("list")
          )
          return new_data_set.assign(**new_cols)
  
      p.__doc__ = learner_pred_fn_docstring("placeholder_imputer")
  
      log = {
          "placeholder_imputer": {
              "columns_to_impute": columns_to_impute,
              "training_proportion_of_nulls": df[columns_to_impute]
              .isnull()
              .mean(axis=0)
              .to_dict(),
              "placeholder_value": placeholder_value,
          }
      }
  
      return p, p(df), log
  
file_path: fklearn/src/fklearn/training/imputation.py
imports: from typing import Any, List, Optional
  import pandas
  from sklearn.impute import SimpleImputer
  from toolz import curry, identity
  from fklearn.common_docstrings import learner_return_docstring, learner_pred_fn_docstring
  from fklearn.types import LearnerReturnType
  from fklearn.training.utils import log_learner_time
label_desc: Use image node_id 2 for calling a global function with example usage: placeholder_imputer(df, columns_to_impute, placeholder_value) and returns: p,  p,  log, new_data_set