【发布时间】:2022-01-23 05:36:15
【问题描述】:
我有一个包含 3 个日期时间列的数据框
ItemUid HireStart DCompleteDate OffHire
14055 2021-01-01 2021-12-17 2021-01-09
14065 2021-08-12 2021-12-17 2021-11-17
14534 2018-12-21 NaT NaT
11639 NaT NaT NaT
43268 2020-09-07 2020-09-03 2020-11-03
36723 2021-01-03 Nat 2021-01-10
我正在尝试返回一个数据框,该数据框返回在用户输入的日期范围之间租用的项目。
即:如果用户输入:开始日期 = '2021-01-02' & 结束日期 = '2021-01-08',预期结果将是:
ItemUid HireStart DCompleteDate OffHire
14055 2021-01-01 2021-01-23 2021-01-09
14534 2018-12-21 NaT NaT
36723 2021-01-03 Nat 2021-01-10
我的代码:)
def date_range(df):
start_date = input("Enter start date dd/mm/yyyy: ")
end_date = input("Enter end date dd/mm/yyyy: ")
df = df[(df['OffHire'] <= end_date) &
((df['HireStart'].notna()) | (df['HireStart'] >= start_date))]
return df
result = df_hire.apply(date_range, axis=1)
目前出现错误:
TypeError Traceback (most recent call last)
<ipython-input-60-6d4d17020cba> in <module>()
9 return df
10
---> 11 result = df_hire.apply(date_range, axis=1)
4 frames
<ipython-input-60-6d4d17020cba> in date_range(df)
3 end_date = input("Enter end date dd/mm/yyyy: ")
4
----> 5 df = df[(df['OffHire'] <= end_date) &
6 ((df['HireStart'].notna()) | (df['HireStart'] >= start_date))]
7
TypeError: '<=' not supported between instances of 'Timestamp' and 'str'
我可能可以修复错误,但是如何应用该功能的实现让我卡住了!
任何帮助都将不胜感激,这对我来说将是另一个教训!
提前致谢
【问题讨论】:
-
想想如何将
end_date转换为时间戳。 -
您在函数中使用了
Actual Off Hire和'ErCompleteDate,但您的df没有这些列。此外,您的预期输出与您的日期范围不匹配。当原始行是“2021-12-17”时,输出的第一行如何获得“2021-01-23”的“DCompleteDate”?为什么“HireStart”在输入 start_date 之前包含第二行? -
是的,抱歉,为了清楚起见,我修改了 col 名称,但忘记更改代码
标签: python pandas datetime timedelta