Source code for cdm_reader_mapper.metmetpy.datetime.correction_functions
"""
Internal metmetpy correction functions.
Created on Tue Jun 25 09:07:05 2019
@author: iregon
"""
from __future__ import annotations
import pandas as pd
from .. import properties
from . import model_datetimes
[docs]
def dck_201_icoads(data: pd.DataFrame) -> pd.DataFrame:
"""
Adjust ICOADS date/time fields for dataset DCK 201.
If year <= 1899 and hour == 0, shift the datetime back by one day.
Parameters
----------
data : pd.DataFrame
Input DataFrame containing ICOADS date columns (YR, MO, DY, HR),
using multi-index or string column names as defined in properties.
Returns
-------
pd.DataFrame
DataFrame with adjusted ICOADS date/time fields.
"""
yr_col = properties.metadata_datamodels["year"]["icoads"]
mo_col = properties.metadata_datamodels["month"]["icoads"]
dd_col = properties.metadata_datamodels["day"]["icoads"]
hr_col = properties.metadata_datamodels["hour"]["icoads"]
datetime_cols = [yr_col, mo_col, dd_col, hr_col]
loc = (data[yr_col] <= 1899) & (data[hr_col] == 0)
if loc.any():
datetime_ = model_datetimes.to_datetime(data, "icoads")
datetime_.loc[loc] = datetime_.loc[loc] - pd.Timedelta(days=1)
data[datetime_cols] = model_datetimes.from_datetime(datetime_, "icoads")
data[datetime_cols] = data[datetime_cols].astype("int")
return data