如何在不改变天数的前提下为DatetimeIndex中的日期增加一个月?
问题描述
现有如下代码:
import pandas as pd idx = pd.DatetimeIndex(["2019-07-15", "2019-08-15", "2019-09-15", "2019-10-15"]) # 输出结果: # DatetimeIndex(['2019-07-15', '2019-08-15', '2019-09-15', '2019-10-15'], dtype='datetime64[ns]', freq=None)
需要为每个日期增加一个月,同时保留原日期的天数,预期输出如下:
DatetimeIndex(['2019-08-15', '2019-09-15', '2019-10-15', '2019-11-15'], dtype='datetime64[ns]', freq=None)
解决方案
方法1:使用pandas.DateOffset
这是pandas中处理日期偏移最直接的方式,DateOffset(months=1)会精准为每个日期增加一个月,且保留原日期的日分量(前提是目标月份存在该日期):
import pandas as pd idx = pd.DatetimeIndex(["2019-07-15", "2019-08-15", "2019-09-15", "2019-10-15"]) new_idx = idx + pd.DateOffset(months=1) print(new_idx)
执行后将得到预期的输出结果。
方法2:结合dateutil.relativedelta
如果需要处理更复杂的日期边界场景(比如闰日、月末日期),可以使用dateutil库的relativedelta,它在特殊日期偏移上的表现更灵活:
import pandas as pd from dateutil.relativedelta import relativedelta idx = pd.DatetimeIndex(["2019-07-15", "2019-08-15", "2019-09-15", "2019-10-15"]) new_idx = idx + relativedelta(months=1) print(new_idx)
该方法同样能满足需求,并且对于像2020-02-29这样的闰日,会自动偏移为2020-03-29,避免日期错误。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

