Проверьте, если столбец даты и времени пуст - PullRequest
1 голос
/ 27 февраля 2020

Я хочу проверить внутри функции, например, если столбец даты и времени пуст, сделать что-то. Мой пример df:

    date_dogovor    date_pogash date_pogash_posle_prodl
0   2019-03-07  2020-03-06  NaT
1   2019-02-27  2020-02-05  NaT
2   2011-10-14  2016-10-13  2019-10-13
3   2019-03-28  2020-03-06  NaT
4   2019-04-17  2020-04-06  NaT

Моя функция:

def term(date_contract , date_paymnt, date_paymnt_aftr_prlngtn):
if date_paymnt_aftr_prlngtn is None:
    return date_paymnt - date_contract 
else:
    return date_paymnt_aftr_prlngtn - date_contract 

Применение функции к df:

df['term'] = df.apply(lambda x: term(x['date_dogovor'], x['date_pogash'], x['date_pogash_posle_prodl']), axis=1 )

Результат неверный:

df['term']

    0              NaT
1              NaT
2              NaT
3              NaT
4              NaT
            ...   
115337         NaT
115338         NaT
115339   2921 days
115340         NaT
115341         NaT
Name: term, Length: 115342, dtype: timedelta64[ns]

Как правильно проверить, если столбец datetime пуст?

1 Ответ

1 голос
/ 27 февраля 2020

Здесь лучше / быстрее использовать numpy.where с Series.isna:

df['term'] = np.where(df['date_pogash_posle_prodl'].isna(),
                      df['date_pogash'] - df['date_dogovor'], 
                      df['date_dogovor'] - df['date_dogovor'])

Ваша функция должна быть изменена с pandas.isna :

def term(date_contract , date_paymnt, date_paymnt_aftr_prlngtn):
    if pd.isna(date_paymnt_aftr_prlngtn):
        return date_paymnt - date_contract 
    else:
        return date_paymnt_aftr_prlngtn - date_contract 
...