如何将 datetime64[ns] 格式的日期增加 6 个日历月?

How can I increment a date in datetime64[ns] format by 6 calendar months?

我从来没有意识到在 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 上的现有文章没有帮助。

运行:

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

对于示例 DataFrame,结果是:

   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

您的代码失败,因为当您将函数应用于 Series (DataFrame的一列),那么参数就是each single 系列.

的元素

所以你可以这样写:

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

但我的代码速度更快。