如果另一列中的日期时间晚于给定的日期时间(在本例中为今年7月1日),我想在新列中返回“是”。
source_df['Request Date']
0 2018-03-16 16:29:18
1 2019-05-07 17:40:16
2 2019-06-03 12:35:18
3 PENDING
df['Requested in Time?'] = source_df['Request Date'].apply(lambda x: "YES" if x.str[0:8] > datetime.datetime(2019, 7, 1) else "NO")
这会给我错误消息AttributeError: 'datetime.datetime' object has no attribute 'str'
。
但是,当我修改代码以读取x > datetime.datetime
时,出现以下错误消息:TypeError: '>' not supported between instances of 'float' and 'datetime.datetime'
那么看来我的source_df
数据既是日期时间又是浮动时间?
我还意识到我需要处理PENDING(它也应该返回“ YES”),但一次只能处理一件事。
答案 0 :(得分:0)
有关熊猫的日期和时间功能的概述,请参见Time series / date functionality。
def check_request_date(x):
try:
return 'YES' if pd.to_datetime(x[:10]) > pd.to_datetime('2019-07-01') else 'NO'
except:
return 'YES' if x == 'PENDING' else 'UNKNOWN'
df['Requested in Time?'] = df['Request Date'].apply(check_request_date)
结果(根据您的示例代码,实际上,YES / NO可能应该恰好相反,即,如果请求日期<=截止日期,则为YES):
Request Date Requested in Time?
0 2018-03-16 16:29:18 NO
1 2019-05-07 17:40:16 NO
2 2019-06-03 12:35:18 NO
3 PENDING YES
如果您希望具有更灵活的功能,并将截止日期作为参数传递:
def check_request_date(x, deadline):
try:
return 'YES' if pd.to_datetime(x[:10]) > pd.to_datetime(deadline) else 'NO'
except:
return 'YES' if x == 'PENDING' else 'UNKNOWN'
df['Requested in Time?'] = df['Request Date'].apply(check_request_date, args=('2019-07-01',))
(请注意'2019-07-01'之后的逗号以使其成为元组)
替代方法:pd.to_datetime(x).date() > datetime.date(2019,7,1)
使用date函数。