如何解决Python Timedelta[M] 添加不完整天数
我有一个表,其中有一个 Months_since_Start_fin_year 列和一个 Date 列。我需要将第一列中的月数与第二列中的日期相加。
DateTable['Date']=DateTable['First_month']+DateTable['Months_since_Start_fin_year'].astype("timedelta64[M]")
这适用于第 0 个月,但第 1 个月的时间已经不同,并且第 2 个月的日期错误。 Image of output table where early months have the correct date but month 2 where I would expect June 1st actually shows May 31st 一定是添加了不完整的月份,但我不知道如何解决?
我也试过
DateTable['Date']=DateTable['First_month']+relativedelta(months=DateTable['Months_since_Start_fin_year'])
但我收到一个类型错误,内容为
TypeError: 无法将系列转换为
我的 Months_since_Start_fin_year 是 int32 类型,我的 First_month 变量是 datetime64[ns]
解决方法
添加月份作为日期偏移量的问题在于,并非所有月份的长度都相同(28-31 天)。所以你需要 pd.DateOffset 来为你处理这种歧义。另一方面,.astype("timedelta64[M]")
只为您提供一年内每月的平均天数 (30 days 10:29:06
)。
例如:
import pandas as pd
# a synthetic example since you didn't provide a mre
df = pd.DataFrame({'start_date': 7*['2017-04-01'],'month_offset': range(7)})
# make sure we have datetime dtype
df['start_date'] = pd.to_datetime(df['start_date'])
# add month offset
df['new_date'] = df.apply(lambda row: row['start_date'] +
pd.DateOffset(months=row['month_offset']),axis=1)
这会给你例如
df
start_date month_offset new_date
0 2017-04-01 0 2017-04-01
1 2017-04-01 1 2017-05-01
2 2017-04-01 2 2017-06-01
3 2017-04-01 3 2017-07-01
4 2017-04-01 4 2017-08-01
5 2017-04-01 5 2017-09-01
6 2017-04-01 6 2017-10-01
您可以在此处找到类似的示例,例如Add months to a date in Pandas。我只是通过使用 apply
修改了那里的答案,以便能够从 DataFrame 的列之一中获取几个月的偏移量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。