希望这是一个简单的修复,我在这里四处搜索以找到类似的问题,但找不到处理此特定问题的内容。如果它确实存在,答案就在我的脑海中飞过......
我有一个开始日期和结束日期的列表,我想找出它们之间的差异(以月为单位),然后使用该值来计算其他内容。以下是开始和结束日期:
开始日期 | 结束日期 |
---|---|
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'
所以是的。现在我被困住了。我想我可以添加一个具有日期差异的列,然后使用比来满足我的需要,但我想了解我在这里缺少的内容。
非常感谢任何帮助。
可以试试这个:
(df1['End Date'].dt.to_period('M') - df1['Start Date'].dt.to_period('M'))