如何在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
相关产品推荐
相关产品推荐

