Управление значениями, не соответствующими формату ЧЧ: ММ: СС - python - PullRequest
1 голос
/ 14 февраля 2020

У меня есть кадр данных, который выглядит следующим образом:

    arrival     departure
0   23:55:00    23:57:00
1   23:57:00    23:59:00
2   23:59:00    24:01:00
3   24:01:00    24:03:00
4   24:03:00    24:05:00

Я работаю с данными, которые охватывают целый день и часть следующего дня. Данные (в большинстве случаев) представлены в формате HH:MM:SS. Однако некоторые значения времени выше, чем 23:59:59 и go до 27: 00: 00.

Я хотел бы получить разницу во времени между столбцами departure и arrival.

Я пытался использовать datetime, чтобы сделать это, но я предполагаю, что что-то пошло не так:

FMT = '%H:%M:%S'

delta = datetime.strptime(df['departure'], FMT) - datetime.strptime(df['arrival'], FMT)

, что вызывает следующую ошибку:

ValueError: time data '24:01:00' does not match format '%H:%M:%S'

Есть ли способ получить разница во времени между этими двумя столбцами, хотя их формат не всегда соответствует формату HH:MM:SS?

1 Ответ

2 голосов
/ 14 февраля 2020

Вы можете использовать timedelta из datetime

import datetime

delta1 = datetime.timedelta(hours=23, minutes=59, seconds=0)
delta2 = datetime.timedelta(hours=24, minutes=01, seconds=0)
timedelta = delta2 - delta1
>>> timedelta # or timedelta.to_seconds()
datetime.timedelta(seconds=120)

Дайте вам дельту в секундах. Полный пример:

import datetime

arrival = "24:01:00"
departure = "24:03:00"


def get_time_from_string(t):
    return dict(
        zip(["hours", "minutes", "seconds"], list(map(lambda x: int(x), t.split(":"))),)
    )


delta1 = datetime.timedelta(**get_time_from_string(arrival))
delta2 = datetime.timedelta(**get_time_from_string(departure))

delta = delta2 - delta1
print(delta.total_seconds())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...