我有一个数据框,在其中我对两个不同的日期进行了区别,以获取小时和分钟的区别,例如:
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'
有什么主意吗?
答案 0 :(得分:2)
您需要以小时,分钟和秒为单位计算等效项, 您可以实现一个函数来获取该值,例如:
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))
答案 1 :(得分:0)
您拥有的是一个datetime.timedelta
对象,这是从两个datetime.datetime
对象的减法中得到的。 doc已经回答了这个问题。
顺便说一句,您似乎真的想使用strptime
时正在尝试使用strftime
。 strptime
p 解析一个字符串并将其转换为datetime.datetime
对象(因此 p ),而strftime
f 将datetime.datetime
对象格式化为字符串(因此 f )。
答案 2 :(得分:0)
首先使用pd.to_datetime将列转换为datetime字段。
让我们说您有一个带有start_time列的数据框df。
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格式给出。