Pandas форматирование даты - PullRequest
       1

Pandas форматирование даты

0 голосов
/ 19 ноября 2018

У меня есть две функции ниже:

def create_base_df(start_date, end_date):
    base_df = pd.DataFrame({"dt": pd.date_range(start_date, end_date)})
    base_df["dt_num_key"] = base_df.dt.apply(lambda x: datetime.datetime.strftime(x, "%Y%m%d")).astype(int)
    base_df["cal_yr_nkey"] = base_df.dt.dt.strftime("%Y")
    base_df["cal_mon_ofyr_nkey"] = base_df.dt.dt.strftime("%m")
    base_df["cal_qtr_ofyr_nkey"] = base_df.dt.dt.quarter.astype(str).apply(lambda x: x.rjust(2, '0'))
    base_df["cal_wk_ofyr_nkey"] = base_df.dt.dt.week.astype(str)

    return base_df

def month_operations(df):
    df["cal_mon_nm"] = df.dt.dt.strftime("%B")
    df["cal_mon_shrt_nm"] = df.dt.dt.strftime("%b")
    df["cal_yr_mon_nkey"] = df["cal_yr_nkey"] + df["cal_mon_ofyr_nkey"]
    df["mon_seq_id"] = df.cal_yr_mon_nkey.sort_values().reset_index()     ["cal_yr_mon_nkey"].rank(method='dense').astype(int)
    df["dt_frst_dayof_mon"] = df.dt.apply(lambda x: datetime.datetime(x.year, x.month, 1))
    df["dt_frst_dayof_mon_nkey"] =   df["dt_frst_dayof_mon"].dt.strftime("%Y%m%d")
    df["dt_lst_dayof_mon"] = df["dt_frst_dayof_mon"] + pd.tseries.offsets.DateOffset(
    months=1) - pd.tseries.offsets.DateOffset(days=1)
    df["dt_lst_dayof_mon_nkey"] =   df["dt_lst_dayof_mon"].dt.strftime("%Y%m%d")
    df["dt_frst_dayof_lst_mon"] = df["dt_frst_dayof_mon"] - pd.DateOffset(months=1)
    df["dt_frst_dayof_lst_mon_nkey"] = df["dt_frst_dayof_lst_mon"].dt.strftime("%Y%m%d")
    df["dt_lst_mon"] = df.dt - pd.tseries.offsets.DateOffset(months=1)
    df["dt_lst_mon_nkey"] = df["dt_lst_mon"].dt.strftime("%Y%m%d")
    df["dt_lst_yr_lst_mon"] = df.dt_lst_mon - pd.tseries.offsets.DateOffset(years=1)
    df["dt_lst_yr_lst_mon_nkey"] = df["dt_lst_yr_lst_mon"].dt.strftime("%Y%m%d")

    return df

Столбцы dt_lst_yr_lst_mon_nkey, dt_lst_mon_nkey и dt_frst_dayof_lst_mon_nkey возвращают значения в формате datetime ('1899-12-01 00:00:00'), и я не могу понять, почему. Все остальные * ключевые столбцы возвращают целые числа, как и ожидалось

моя главная выглядит так:

base_df = create_base_df(start_date="01/01/1900", end_date="01/12/1900")
month_df = month_operations(base_df)

Ожидаемый результат: если значение dt_lst_yr_lst_mon равно "1900-12-01 00:00:00", тогда dt_lst_yr_lst_mon_nkey будет "19001201"

Любые указатели на то, куда я иду, приветствуются.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...