#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'
, первый — нет.