如何将 datetime.timedelta 转换为整数月份?

问题描述 投票:0回答:1

希望这是一个简单的修复,我在这里四处搜索以找到类似的问题,但找不到处理此特定问题的内容。如果它确实存在,答案就在我的脑海中飞过......

我有一个开始日期和结束日期的列表,我想找出它们之间的差异(以月为单位),然后使用该值来计算其他内容。以下是开始和结束日期:

开始日期 结束日期
2021-05-01 2022-09-01
2022-10-30 2023-03-30
2022-10-30 2023-12-31
2022-05-01 2023-03-30
2021-05-02 2023-03-30
2022-10-30 2023-09-01
2022-10-01 2023-09-30

过去我是这样做的:

(df1['End Date'] - df1['Start Date'])/np.timedelta64(1, 'M')

事实上,当我运行它时,它返回:

0    16.033183
1     4.961087
2    14.029036
3    10.940676
4    22.899854
5    10.053595
6    11.959178
dtype: float64

现在我想在 for 循环中执行此操作,因为我的数据中有一些行我不希望应用此计算。当我循环运行它时,我收到此错误:

UFuncTypeError: ufunc 'true_divide' cannot use operands with types dtype('O') and dtype('<m8[M]')

我已经尝试将其分解。如果我运行这个

print((df1['End Date'].iloc[2] - df1['Start Date'].iloc[2]))

我明白了,

427 days, 0:00:00

但是如果我运行这个,

print((df1['End Date'].iloc[2] - df1['Start Date'].iloc[2])/np.timedelta64(1, 'M'))

我得到了与上面相同的错误。

所以我想我可以明白为什么会出现错误,但我不知道该怎么办。我尝试过像这样转换日期差异,

(df1['End Date'].iloc[2] - df1['Start Date'].iloc[2]).astype("timedelta64")

但它错误地说,

AttributeError: 'datetime.timedelta' object has no attribute 'astype'

所以是的。现在我被困住了。我想我可以添加一个具有日期差异的列,然后使用比来满足我的需要,但我想了解我在这里缺少的内容。

非常感谢任何帮助。

python pandas timedelta
1个回答
0
投票

可以试试这个:

(df1['End Date'].dt.to_period('M') - df1['Start Date'].dt.to_period('M'))
© www.soinside.com 2019 - 2024. All rights reserved.