Python计算两个Datetime差值并转为HH:MM:SS格式(跨天转小时)
解决Pandas中跨天时间差转HH:MM:SS格式的问题
当你用df['trip_duration'] = df['ended_at'] - df['started_at']生成时间差列后,默认的timedelta字符串会包含天数(比如1 days 12:00:00),要实现将天数转成小时累加并输出HH:MM:SS格式,可通过以下步骤处理:
步骤1:确保时间列是datetime类型(如未转换)
如果你的started_at和ended_at还不是datetime格式,先执行转换:
import pandas as pd df['started_at'] = pd.to_datetime(df['started_at']) df['ended_at'] = pd.to_datetime(df['ended_at'])
步骤2:计算原始时间差
生成timedelta类型的差值列:
df['trip_duration'] = df['ended_at'] - df['started_at']
步骤3:自定义函数格式化时间差
编写函数将timedelta转换为目标格式,核心是通过总秒数计算小时、分钟、秒,自动处理跨天场景:
def format_timedelta(td): total_sec = int(td.total_seconds()) hours = total_sec // 3600 rem_sec = total_sec % 3600 mins = rem_sec // 60 secs = rem_sec % 60 return f"{hours:02d}:{mins:02d}:{secs:02d}" # 应用函数生成格式化后的列 df['formatted_duration'] = df['trip_duration'].apply(format_timedelta)
示例验证
针对你提到的跨天场景:
起始时间:2022-10-10 14:21:58+00:00
结束时间:2022-10-11 02:21:58+00:00
原始时间差为1 days 12:00:00,经过格式化后输出36:00:00,符合需求。
内容的提问来源于stack exchange,提问作者Lucas Correa
相关产品推荐
相关产品推荐

