Причина, по которой это не работает, заключается в том, что параметр %H
принимает значения только в диапазоне от 00
до 23
(оба включительно).Таким образом, это означает, что 24:00
- как говорит ошибка - не является допустимой временной строкой.
Я думаю, поэтому у нас не так много других вариантов, кроме как преобразовать строку в допустимый формат.Мы можем сделать это, сначала заменив 24:00
на 00:00
, а затем увеличивая день для этих отметок времени.
Как:
from datetime import timedelta
import pandas as pd
df['datetime_zero'] = df['datetime'].str.replace('24:00', '0:00')
df['datetime_er'] = pd.to_datetime(df['datetime_zero'], format='%d/%m/%Y %H:%M')
selrow = df['datetime'].str.contains('24:00')
df['datetime_obj'] = df['datetime_er'] + selrow * timedelta(days=1)
Последняя строка добавляет один день кстроки, содержащие 24:00
, так что '10/11/2006 24:00'
преобразуется в '11/11/2006 24:00'
.Однако обратите внимание, что вышеприведенное довольно небезопасно , поскольку в зависимости от формата отметки времени это будет / не будет работать.Для вышеупомянутого это будет (вероятно) работать, так как есть только одна двоеточие.Но если, например, у datetime
есть также секунды, фильтр может сработать для 00:24:00
, поэтому для его работы может потребоваться дополнительная работа.