已经有一个标题相同的问题,但我找不到我的问题的答案。.我正在将一列中的时间(以小时:分钟:秒的格式)与设置的时间(08:00: 00),并遇到一些问题。
我已经将一些数据从excel导入到pandas数据框中。一些列包含时间。它们在数据框中的格式为“对象”。 我首先创建一个新的数据框,仅包含“ Starttime”列中的时间高于08:00:00的数据,如下所示:
OSR_start_OH = pd.DataFrame()
OSR_start_OH = df[df['Starttime'] >= datetime.time(8,0,0)]
它运行完美。
但是随后,我尝试使用另一列“ Finishtime”进行完全相同的操作:
OSR_finish_OH = pd.DataFrame()
OSR_finish_OH = df[df['Finishtime'] >= datetime.time(8,0,0)]
我收到错误消息'>=' not supported between instances of 'datetime.datetime' and 'datetime.time'
我不明白,因为“ Finishtime”列中的数据格式与“ Starttime”中的格式相同。实际上,它在datetime.time中,而不在datetime.datetime中:
df['Finishtime'][3]
是:datetime.time(20, 0)
此外,我可以使用'> ='比较“ Finishtime”列中的不同单元格:
df['Finishtime'][3] >= df['Finishtime'][10]
是:True
编辑:这是一些数据,它在“ Finishtime”列上显示日期为00:00:00次。
Startdate Starttime Finishdate Finishtime
350 2018-06-06 12:00:00 2018-06-06 15:00:00
351 2018-06-06 15:00:00 2018-06-06 19:18:17
352 2018-06-05 00:00:00 2018-06-06 14:47:54
353 2018-06-05 22:00:00 2018-06-05 1900-01-01 00:00:00
354 2018-06-05 00:00:00 2018-06-06 15:19:21
355 2018-06-05 22:00:00 2018-06-05 1900-01-01 00:00:00
356 2018-06-06 02:00:00 2018-06-06 14:48:45
357 2018-06-06 21:48:16 2018-06-06 02:00:00
编辑2:这是我尝试后得到的
df['Finishtime'].apply(lambda x: datetime.time(x.hour, x.minute, x.second))
Startdate Starttime Finishdate Finishtime
350 2018-06-06 12:00:00 2018-06-06 15:00:00
351 2018-06-06 15:00:00 2018-06-06 19:18:17
352 2018-06-05 00:00:00 2018-06-06 14:47:54
353 2018-06-05 22:00:00 2018-06-05 1900-01-01 00:00:00
354 2018-06-05 00:00:00 2018-06-06 15:19:21
355 2018-06-05 22:00:00 2018-06-05 1900-01-01 00:00:00
356 2018-06-06 02:00:00 2018-06-06 14:48:45
357 2018-06-06 21:48:16 2018-06-06 02:00:00
与上述相同
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
如评论中所述,您在列Finishtime
中混合了类型。
您可以通过应用此函数提取所有值的时间:
df['Finishtime'].apply(lambda x: datetime.time(x.hour, x.minute, x.second))
注意:x.time()
适用于datetime.datetime
个对象,但不适用于datetime.time
。由于您将两者混合使用,因此上述解决方法适用于所有类型。