比较熊猫中的日期时间

时间:2019-07-30 20:02:30

标签: python pandas

如果另一列中的日期时间晚于给定的日期时间(在本例中为今年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”),但一次只能处理一件事。

1 个答案:

答案 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函数。