'> =' не поддерживается между экземплярами datetime.datetime и datetime.time - PullRequest
1 голос
/ 13 июня 2019

Уже существует вопрос с таким же названием, но я не смог найти ответ на свою проблему ... Я сравниваю время (в формате час: минуты: секунды) в столбце с установленным временем (08:00: 00) и возникли некоторые проблемы.

Я импортировал некоторые данные из Excel в кадр данных pandas. Некоторые из столбцов содержат времена. Их формат в кадре данных - «объект». Я начал с создания нового фрейма данных, содержащего только те данные, в которых время в столбце «Время начала» больше, чем 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

Редактировать: это некоторые данные, показывающие дату в столбце «Время окончания» для 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 голосов
/ 13 июня 2019

Как обсуждалось в комментариях, у вас есть смешанные типы в вашем столбце Finishtime. Вы можете извлечь время для всех значений, применяя эту функцию:

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

Примечание: x.time() будет работать для datetime.datetime объектов, но не для datetime.time. Поскольку у вас есть смесь обоих вариантов, описанный выше обходной путь работает для всех типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...