(
data: Union[pd.DataFrame, Dataset, Any],
columns: Union[str, List[str]],
inplace: bool = False,
exclude_columns: Optional[List[str]] = None,
)
| 211 | |
| 212 | |
| 213 | def normalize_timestamp_columns( |
| 214 | data: Union[pd.DataFrame, Dataset, Any], |
| 215 | columns: Union[str, List[str]], |
| 216 | inplace: bool = False, |
| 217 | exclude_columns: Optional[List[str]] = None, |
| 218 | ) -> Union[pd.DataFrame, Dataset, Any]: |
| 219 | column_list = [columns] if isinstance(columns, str) else columns |
| 220 | exclude_columns = exclude_columns or [] |
| 221 | |
| 222 | def apply_normalization(series: pd.Series) -> pd.Series: |
| 223 | return ( |
| 224 | pd.to_datetime(series, utc=True, errors="coerce") |
| 225 | .dt.floor("s") |
| 226 | .astype("datetime64[ns, UTC]") |
| 227 | ) |
| 228 | |
| 229 | if is_ray_data(data): |
| 230 | |
| 231 | def normalize_batch(batch: pd.DataFrame) -> pd.DataFrame: |
| 232 | for column in column_list: |
| 233 | if ( |
| 234 | not batch.empty |
| 235 | and column in batch.columns |
| 236 | and column not in exclude_columns |
| 237 | ): |
| 238 | batch[column] = apply_normalization(batch[column]) |
| 239 | return batch |
| 240 | |
| 241 | return data.map_batches(normalize_batch, batch_format="pandas") |
| 242 | else: |
| 243 | assert isinstance(data, pd.DataFrame) |
| 244 | if not inplace: |
| 245 | data = data.copy() |
| 246 | for column in column_list: |
| 247 | if column in data.columns and column not in exclude_columns: |
| 248 | data[column] = apply_normalization(data[column]) |
| 249 | return data |
| 250 | |
| 251 | |
| 252 | def ensure_timestamp_compatibility( |
no test coverage detected