在“ datetime.datetime”和“ datetime.time”的实例之间不支持“> =”

时间:2019-06-13 08:47:20

标签: python pandas datetime

已经有一个标题相同的问题,但我找不到我的问题的答案。.我正在将一列中的时间(以小时:分钟:秒的格式)与设置的时间(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

与上述相同

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

如评论中所述,您在列Finishtime中混合了类型。 您可以通过应用此函数提取所有值的时间:

df['Finishtime'].apply(lambda x: datetime.time(x.hour, x.minute, x.second))

注意:x.time()适用于datetime.datetime个对象,但不适用于datetime.time。由于您将两者混合使用,因此上述解决方法适用于所有类型。