在 Python 中为 pandas 对象添加月份

Posted

技术标签:

【中文标题】在 Python 中为 pandas 对象添加月份【英文标题】:Adding months to a pandas object in Python 【发布时间】:2019-04-02 04:43:29 【问题描述】:

我有这个数据框对象:

    Date
2018-12-14
2019-01-11
2019-01-25
2019-02-08
2019-02-22
2019-07-26

如果可能的话,我想要添加例如:3 months to the dates,然后是 3 months to the new date (original date + 3 months)repeat this x times。我正在使用pd.offsets.MonthOffset,但这只会增加一次月份,我需要做更多次。 我不知道这是否可能,但任何帮助都是完美的。 非常感谢您抽出宝贵的时间。 预期输出为(1个月加2次):

[[2019-01-14, 2019-02-11, 2019-02-25, 2019-03-08, 2019-03-22,  2019-08-26],[2019-02-14, 2019-03-11, 2019-03-25, 2019-04-08, 2019-04-22,  2019-09-26]]

【问题讨论】:

分享您的预期输出。 @MayankPorwal 完成谢谢 【参考方案1】:

我相信您需要循环使用 f-strings 来获取新列名:

for i in range(1,4):
    df[f'Date_added_i_months'] = df['Date'] + pd.offsets.MonthBegin(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-01          2019-02-01          2019-03-01
1 2019-01-11          2019-02-01          2019-03-01          2019-04-01
2 2019-01-25          2019-02-01          2019-03-01          2019-04-01
3 2019-02-08          2019-03-01          2019-04-01          2019-05-01
4 2019-02-22          2019-03-01          2019-04-01          2019-05-01
5 2019-07-26          2019-08-01          2019-09-01          2019-10-01

或者:

for i in range(1,4):
    df[f'Date_added_i_months'] = df['Date'] + pd.offsets.MonthOffset(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-14          2019-02-14          2019-03-14
1 2019-01-11          2019-02-11          2019-03-11          2019-04-11
2 2019-01-25          2019-02-25          2019-03-25          2019-04-25
3 2019-02-08          2019-03-08          2019-04-08          2019-05-08
4 2019-02-22          2019-03-22          2019-04-22          2019-05-22
5 2019-07-26          2019-08-26          2019-09-26          2019-10-26

【讨论】:

【参考方案2】:

希望对你有帮助

from dateutil.relativedelta import relativedelta
month_offset = [3,6,9]
for i in month_offset:
    df['Date_plus_'+i+'_months'] = df['Date'].map(lambda x: x+relativedelta(months=i))

【讨论】:

【参考方案3】:

如果你的日期是date 对象,那应该很容易。您可以创建一个 3 个月的 timedelta 并将其添加到每个 date

或者,您可以使用.strptime() 将它们转换为日期对象,然后按照您的建议进行操作。您可以使用.strftime() 将它们转换回字符串。

【讨论】:

非常感谢@NotAnAmbiTurner

以上是关于在 Python 中为 pandas 对象添加月份的主要内容,如果未能解决你的问题,请参考以下文章

Python 实战基础Pandas如何给股票数据新增年份和月份

Python Pandas 数据框:对于一年中的每个月,如果月份不存在,则将当月最后一天的日期添加到索引中,或者删除重复项

如何在Python中为现有类添加方法?

单击按钮后,如何在 Bootstrap DateTimePicker 中为日期添加月份?

pandas通过DatetimeProperties对象获取日期对象在所在年的月份的名称信息(month name)

为啥不能在 python 中为对象添加属性? [复制]