仅将日期时间中的时间与 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'
您需要使用 time
或 timedelta
而不是 datetime
。您可以通过 .dt.
methods
访问它
t = pd.to_datetime('10:15:00').time()
df['dtime'].dt.time < t
0 True
1 False
Name: dtime, dtype: bool
我在 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'
您需要使用 time
或 timedelta
而不是 datetime
。您可以通过 .dt.
methods
t = pd.to_datetime('10:15:00').time()
df['dtime'].dt.time < t
0 True
1 False
Name: dtime, dtype: bool