You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中计算DataFrame两列时分秒格式的时间差

解决Pandas计算时间差并格式化为hh:mm:ss的问题

问题分析

你的DataFrame中start_time和end_time是字符串类型(object),直接运算无法识别时间逻辑;用pd.to_datetime转换会自动附加默认日期,但我们只需要时间差的时分秒格式,核心需求是将时间差转为标准的hh:mm:ss字符串。

修正原始数据语法

首先注意原始数据中的时间字符串缺少引号,会导致语法错误,修正后的数据如下:

import pandas as pd

data = {
    "passenger": [913383, 442365, 983560, 163350],
    "start_time": ["0:00:00", "0:01:17", "0:00:24", "0:00:26"],
    "end_time": ["0:00:17", "0:01:32", "0:03:20", "0:01:38"]
}

df = pd.DataFrame(data)

方法一:直接转换为Timedelta类型(推荐)

因为你的数据只有时间部分,没有日期,直接用pd.to_timedelta转换为时间间隔类型,计算差值后再格式化为目标字符串:

# 转换为时间间隔类型
df['start_td'] = pd.to_timedelta(df['start_time'])
df['end_td'] = pd.to_timedelta(df['end_time'])

# 计算时间差
df['time_diff'] = df['end_td'] - df['start_td']

# 定义格式化函数,将Timedelta转为hh:mm:ss字符串
def format_td(td):
    total_sec = int(td.total_seconds())
    h = total_sec // 3600
    m = (total_sec % 3600) // 60
    s = total_sec % 60
    return f"{h:02d}:{m:02d}:{s:02d}"

# 生成目标列
df['time_difference'] = df['time_diff'].apply(format_td)

# 清理中间列(可选)
df = df.drop(['start_td', 'end_td', 'time_diff'], axis=1)

方法二:通过Datetime转换计算

如果习惯用Datetime类型,即使附带默认日期也不影响差值计算,后续同样格式化即可:

# 按时间格式转换为Datetime
df['start_dt'] = pd.to_datetime(df['start_time'], format='%H:%M:%S')
df['end_dt'] = pd.to_datetime(df['end_time'], format='%H:%M:%S')

# 计算时间差
df['time_diff'] = df['end_dt'] - df['start_dt']

# 复用上面的format_td函数生成目标列
df['time_difference'] = df['time_diff'].apply(format_td)

# 清理中间列(可选)
df = df.drop(['start_dt', 'end_dt', 'time_diff'], axis=1)

最终效果

处理后time_difference列会以hh:mm:ss格式存储时间差,例如第一行结果为00:00:17,第二行是00:00:15等。

内容的提问来源于stack exchange,提问作者Jack Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:20:25