我试图找出如何添加3个月到一个日期在Pandas Dataframe ,同时保持它在日期格式,所以我可以用它来查找一个范围。
这是我尝试过的方法:
#create dataframe
df = pd.DataFrame([pd.Timestamp('20161011'),
pd.Timestamp('20161101') ], columns=['date'])
#create a future month period
plus_month_period = 3
#calculate date + future period
df['future_date'] = plus_month_period.astype("timedelta64[M]")
但是,我得到了以下错误:
AttributeError: 'int' object has no attribute 'astype'
4条答案
按热度按时间1hdlvixo1#
您可以使用
pd.DateOffset
使用
pd.offsets.MonthOffset
的另一种方法详情
rqenqsqc2#
假设您有一个以下格式的 Dataframe ,其中您必须向日期列添加整数月份。
| 开始日期|要添加的月数|
| - ------| - ------|
| 2014年6月1日|二十三|
| 2014年6月1日|四个|
| 二零零零年十月一日|十个|
| 2016年7月1日|三个|
| 2017年12月1日|九十|
| 2019年1月1日|第二章|
在这种情况下,使用Zero's code或mattblack's code是没有用的。您必须在函数带有两个参数的行上使用lambda函数-
1.需要添加月份的日期
1.整数格式的月份值
您可以使用以下函数:
之后,您可以使用以下代码片段将月份添加到
Start_Date
列。使用Pandas的progress_apply
功能。请参阅progress_apply
上的Stackoverflow答案:Progress indicator during pandas operations.以下是数据集创建的完整代码表单,供您参考:
您将得到如下所示的最终输出 Dataframe 。
| 开始日期|要添加的月数|结束日期|
| - ------| - ------| - ------|
| 2014年6月1日|二十三|2016年5月1日|
| 2014年6月1日|四个|2014年10月1日|
| 二零零零年十月一日|十个|二零零一年八月一日|
| 2016年7月1日|三个|2016年10月1日|
| 2017年12月1日|九十|二○二五年六月一日|
| 2019年1月1日|第二章|2019年3月1日|
如果上面的代码有任何问题,请添加到注解中。
一切顺利!
xxb16uws3#
我认为解决这个问题最简单、最有效(更快)的方法是使用
to_period(M)
将日期转换为月周期,将结果与Months_to_add列的值相加,然后使用.dt.to_timestamp()
命令将数据作为datetime检索。使用由@Aruparna Maity创建的示例数据
| 开始日期|要添加的月数|
| - ------| - ------|
| 2014年6月1日|二十三|
| 2014年6月20日|四个|
| 二零零零年十月一日|十个|
| 2016年7月5日|三个|
| 二〇一七年十二月十五日|九十|
| 2019年1月1日|第二章|
如果需要确切的日期,只需重复该过程,但将期间更改为天
ctehm74n4#
使用numpy np.timedelta64的另一种方法