Python: сумма НС с относительной долей - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть 2 столбца в наборе данных из 327 записей:

 #   Column                     Non-Null Count  Dtype         
---  ------                     --------------  -----               
 0   JD                         327 non-null    datetime64[ns]       
 1   CD                         312 non-null    Int64

И я хочу создать третий (['theoretical_eoc']), который дает мне даты, хранящиеся в [JD] плюс число месяцы, указанные в [CD]. Но когда я определяю этот новый столбец с помощью:

df['theoretical_eoc'] = turnover.apply(lambda x: x.JD + relativedelta(months=x.CD), axis=1)

, я получаю следующее сообщение об ошибке:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NAType'

Итак, я определил функцию, чтобы поставить NaT в случае, если один из значения в любом из столбцов - это NA:

def rd_na(a, b):
    if pd.isnull(a) or pd.isnull(b):
        pd.NaT
    else:
        a + relativedelta(months = b)

Но когда я его применяю:

df['theoretical_eoc'] = turnover.apply(lambda x: rd_na(x.JD, x.CD), axis=1)

Результатом является столбец, полный None значений, когда я ожидал datetime64[ns] с некоторыми NaT. Что я делаю неправильно? Как я мог выполнить sh эту задачу?

1 Ответ

1 голос
/ 14 апреля 2020

Вам не хватает результатов в функции rd_na

def rd_na(a, b):
    if pd.isnull(a) or pd.isnull(b):
        return pd.NaT
    else:
        return a + relativedelta(months = b)

Рассмотрите возможность использования DateOffset из pandas, поскольку он обрабатывает pd.NaT

from pandas.tseries.offsets import DateOffset

df['theoretical_eoc'] = turnover.apply(lambda x: x.JD +
                                       DateOffset(months=x.CD), axis=1)
...