Проверка формата времени в течение 24 часов с помощью pandas

#pandas #dataframe #validation

#pandas #фрейм данных #проверка

Вопрос:

Я пытаюсь найти способ проверки формата времени, но более 24 часов. Я имею в виду, что если ячейка времени просто считает часы, она может превышать 24 часа. Допустим, у меня есть этот df

  Time      Family-name       Name    Sex   Birthdate
 13:34:51  Doe               John    M     1989-09-22
 32:42:02  Dolores           Trevino M     1984-02-18
 28:50:06  Emer              Han     M     1987-12-10
 

Я попытался использовать что-то вроде:

 pd.to_datetime(df['Time'], format='%H:%M:%S', errors='coerce').notnull().all()
 

но, конечно, я получаю ошибки за время более 24 часов.

Есть идеи?

Комментарии:

1. Что не так с вашим кодом? Он отлично работает с образцами данных в моей системе, предоставляя False .

2. pd.to_datetime('32:42:02', format='%H:%M:%S', errors='coerce') -> NaT как и ожидалось. Ваш код работает нормально. Какова ваша версия pandas? Чтобы получить версию pandas, используйте pd.__version__

3. @QuangHoang Я хотел бы знать, что все ячейки во временной строке находятся в этом формате. ЧЧ: ММ: СС. Я имею в виду, что я не хочу 24-часовую проверку формата. Например, 12:42: 59 — это проход, 45:21:45 — это проход, 132:59:59 — это проход. С предоставленным решением все, что выше 24, не является пропуском

4. @QuangHoang Может быть, я не совсем ясно выразился. Допустим, что в разделе Time я считаю прошедшие часы. Как я могу проверить, что эта конкретная ячейка имеет определенный формат?. Кстати, если я удалю all() , это будет работать не так, как ожидалось.

Ответ №1:

Используйте regex шаблон для сопоставления:

 pat = '^d :d{,2}:d{,2}

Или используйте pd.to_timedelta  :

 pd.to_timedelta(df['Time'], errors='coerce').notna()
 

Второй подход позволяет '1 day 1:00:00' , первый - нет.

df['Time'].str.match(pat)
Или используйте pd.to_timedelta :


Второй подход позволяет '1 day 1:00:00' , первый — нет.