Как я могу увеличить дату в формате datetime64 [ns] на 6 календарных месяцев?

#pandas #datetime #increment #strptime

#pandas #дата и время #увеличить #strptime

Вопрос:

Я никогда не понимал, что увеличение простой даты в Python будет такой непреодолимой проблемой, но сдался после 2 часов попыток и поиска на этом форуме. У меня есть фрейм данных со столбцом effective_date , который содержит записи типа 2019-01-02 и типа datetime64[ns] данных.

Я пробовал:

 data['effective_date'] = pd.to_datetime(data['effective_date'].values)
data['six_mth_interval'] = data['effective_date'].apply(lambda x: x['effective_date'].values   relativedelta(months=6))
 

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

 <ipython-input-315-b81c59eb6b0d> in <lambda>(x)
----> 1 data['six_mth_interval'] = data['effective_date'].apply(lambda x: x['effective_date']   relativedelta(months=6))

TypeError: 'Timestamp' object is not subscriptable
 

Существующие статьи по S / O не помогли.

Ответ №1:

Беги:

 data['six_mth_interval'] = data.effective_date   pd.DateOffset(months=6)
 

Для примера фрейма данных результатом будет:

    effective_date six_mth_interval
0      2019-08-01       2020-02-01
1      2019-08-02       2020-02-02
2      2019-08-25       2020-02-25
3      2019-08-26       2020-02-26
4      2019-08-27       2020-02-27
5      2019-08-28       2020-02-28
6      2019-08-29       2020-02-29
7      2019-08-30       2020-02-29
8      2019-08-31       2020-02-29
9      2019-09-01       2020-03-01
10     2019-09-02       2020-03-02
 

Ваш код не удался, потому что, когда вы применяете функцию к ряду
(столбец фрейма данных), тогда аргументом является каждый отдельный
элемент этой Серии.

Чтобы вы могли написать:

 data['six_mth_interval'] = data['effective_date'].apply(
    lambda x: x   pd.DateOffset(months=6))
 

но мой код работает быстрее.

Комментарии:

1. Большое спасибо за это — действительно ценю это! Не могу поверить, что мне потребовалось так много времени, чтобы понять это, но одно я запомню навсегда..