class_docstr: Transforms datetime features into numeric features.
  
  Parameters
  ----------
  features : list, optional
      A list of datetime features to parse out of dates.
      For a full list of options see the methods inside pandas.Series.dt at https://pandas.pydata.org/docs/reference/api/pandas.Series.html
code: def normalize_timeseries(
      self, X: pd.DataFrame, feature: str, is_fit: bool
  ) -> pd.Series:
      # TODO: Be aware: When converted to float32 by downstream models, the seconds value will be up to 3 seconds off the true time due to rounding error.
      #  If seconds matter, find a separate way to generate (Possibly subtract smallest datetime from all values).
      # TODO: could also return an extra boolean column is_nan which could provide predictive signal.
      # Note: The .replace call is required to handle the obnoxious edge-case of:
      #   NaN, empty string, datetime without timezone, and datetime with timezone, all as an object type, all being present in the same column.
      #   I don't know why, but in this specific situation (and not otherwise), NaN will be filled by .fillna, but empty string will be converted to NaT
      #   and refuses to be filled by .fillna, requiring a dedicated replace call. (NaT is filled by .fillna in every other situation...)
      series = pd.to_datetime(
          X[feature].copy(), utc=True, errors="coerce", format="mixed"
      )
      broken_idx = series[
          (series == "NaT") | series.isna() | series.isnull()
      ].index
      bad_rows = series.iloc[broken_idx]
      if is_fit:
          good_rows = series[~series.isin(bad_rows)].astype(np.int64)
          self._fillna_map[feature] = pd.to_datetime(
              int(good_rows.mean()), utc=True, format="mixed"
          )
      series[broken_idx] = self._fillna_map[feature]
      return series
  
file_path: autogluon/features/src/autogluon/features/generators/datetime.py
imports: import logging
  import numpy
  import pandas
  from pandas import DataFrame
  from autogluon.common.features.types import R_DATETIME, S_DATETIME_AS_OBJECT
  from .abstract import AbstractFeatureGenerator
label_desc: Use image node_id 5 for calling the DatetimeFeatureGenerator obj's underlying member method code with example usage: obj.normalize_timeseries(X, feature, is_fit) and returns: series