Преобразовать дни и время (часы х минут х секунд) только во время - PullRequest
0 голосов
/ 05 июля 2018

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

 start_date = '2018-07-03 16:03:00'
 data_final = '2018-07-05 00:00:00'
 duration = data_final - start_date

Результат, который я ищу: '31: 57: 00 ', или общая разница во времени между двумя датами. Но результат у меня такой: '1 день, 7: 57: 00' (каждые 24 часа записывается как 1 день).

Я попытался преобразовать его в формат XMinutesHours с заявлением:

print (datetime.datetime.strptime (duration, "%H:%M:%S"))

Но я получил ошибку:

ValueError: данные времени '1 день, 7:57:00' не соответствуют формату '% H:% M:% S '

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Сначала преобразуйте столбцы в поля даты и времени, используя pd.to_datetime.

Допустим, у вас есть датафрейм df со столбцом start_time.

import pandas as pd

df['start_time'] = pd.to_datetime(df['start_time']
df['end_time'] = pd.to_datetime(df['end_time']

df['time_diff'] = (df.end_time - df.start_time) #gets the time in hours

, если вы хотите преобразовать его в часы, используйте:

df['time_diff'] = df['time_diff'].dt.total_seconds()/(3600.0)

Но это не даст точно в формате H: M: S.

0 голосов
/ 06 июля 2018

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

from datetime import datetime

def get_duration(duration):
    hours = int(duration / 3600)
    minutes = int(duration % 3600 / 60)
    seconds = int((duration % 3600) % 60)
    return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)

format_str = '%Y-%m-%d %H:%M:%S'
start_date_str = '2018-07-03 16:03:00'
end_date_str = '2018-07-05 00:00:00'

start_date = datetime.strptime(start_date_str, format_str)
end_date = datetime.strptime(end_date_str, format_str)
duration = (end_date - start_date).total_seconds()

print(get_duration(duration))
0 голосов
/ 05 июля 2018

То, что у вас есть, это datetime.timedelta объект, который вы получаете из вычитания двух datetime.datetime объектов. На этот вопрос уже ответили здесь .

На заметку, похоже, что вы пытаетесь использовать strptime, когда вы действительно хотите использовать strftime. strptime p оценивает строку и превращает ее в datetime.datetime объект (отсюда p ), тогда как strftime f форматирует datetime.datetime объект в виде строки (отсюда f ).

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