#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. Большое спасибо за это — действительно ценю это! Не могу поверить, что мне потребовалось так много времени, чтобы понять это, но одно я запомню навсегда..