def _apply_timezone()

in awswrangler/_arrow.py [0:0]


def _apply_timezone(df: pd.DataFrame, metadata: dict[str, Any]) -> pd.DataFrame:
    for c in metadata["columns"]:
        if "field_name" in c and c["field_name"] is not None:
            col_name = str(c["field_name"])
        elif "name" in c and c["name"] is not None:
            col_name = str(c["name"])
        else:
            continue
        if col_name in df.columns and c["pandas_type"] == "datetimetz":
            column_metadata: dict[str, Any] = c["metadata"] if c.get("metadata") else {}
            timezone_str: str | None = column_metadata.get("timezone")

            if timezone_str:
                timezone: datetime.tzinfo = pa.lib.string_to_tzinfo(timezone_str)
                _logger.debug("applying timezone (%s) on column %s", timezone, col_name)

                if hasattr(df[col_name].dt, "tz") is False or df[col_name].dt.tz is None:
                    df[col_name] = df[col_name].dt.tz_localize(tz="UTC")

                if timezone is not None and timezone != pytz.UTC and hasattr(df[col_name].dt, "tz_convert"):
                    df[col_name] = df[col_name].dt.tz_convert(tz=timezone)

    return df