仅将日期时间中的时间与 HH:MM:SS 形式的字符串进行比较

Compare only time in datetime to string in form HH:MM:SS

我在 pandas df 中有一列,其字符串日期时间如下所示

a,dtime
1,2017-07-06 09:15:00
1,2017-07-06 10:15:00

我正在写一个需要比较时间的脚本

我需要比较 df[df.dtime < "10:15:00"](没有日期) 所以我转换了 df['dtime']=pd.to_datetime(df['dtime']) 如果我这样做

df[df.dtime < "10:15:00"]

它以今天为默认日期,并且总是与我不想要的今天的“10:15:00”进行比较。

所以我创建了另一个专栏,然后像下面那样做了

df['ts']=df.dtime.apply(lambda x: x.time())
df[df.ts<"09:16:00"]
TypeError: can't compare datetime.time to str
df[df.ts<pd.to_datetime("09:16:00").time()] #this works well

有没有更好的方法来完成这个简单的任务,我认为创建新的 ts 列没有任何意义。

当我做的时候 df['dtime']=pd.to_datetime(df['dtime']) 我应该只提取时间部分。但是做 df['dtime']=pd.to_datetime(df['dtime']).time() 给出错误 AttributeError: 'Series' object has no attribute 'time'

您需要使用 timetimedelta 而不是 datetime。您可以通过 .dt. methods

访问它
t = pd.to_datetime('10:15:00').time()

df['dtime'].dt.time < t

0    True
1    False
Name: dtime, dtype: bool