如何将 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))
但我的代码速度更快。
我从来没有意识到在 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))
但我的代码速度更快。