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

如何计算Pandas DataFrame中datetime.time类型列的时间差值?

解决Pandas中datetime.time类型无法直接相减的问题

错误原因

datetime.time类型本身不支持直接减法运算,直接对ORDER START TIME和ORDER END TIME列做差会抛出TypeError。

解决方案

根据数据是否包含日期信息,分两种场景处理:


场景1:订单开始/结束时间在同一天(无日期信息)

方法1:转为datetime类型计算差值

将时间列转换为完整的datetime64类型(默认结合1900-01-01作为日期),再计算时间差:

import pandas as pd

df = pd.read_excel('/content/Haoling peak time data (1).xlsx')
# 转换时间列为datetime类型
df['ORDER START TIME'] = pd.to_datetime(df['ORDER START TIME'], format='%H:%M:%S')
df['ORDER END TIME'] = pd.to_datetime(df['ORDER END TIME'], format='%H:%M:%S')
# 计算时间差(结果为timedelta类型,可直接查看天/时/分/秒)
df['Difference'] = df['ORDER END TIME'] - df['ORDER START TIME']

# 可选:将差值转为分钟/小时数值
df['Difference_Minutes'] = df['Difference'].dt.total_seconds() / 60
df['Difference_Hours'] = df['Difference'].dt.total_seconds() / 3600
方法2:转为总秒数后做差

直接提取时间的小时、分钟、秒,计算当天的总秒数,再做差值:

import pandas as pd

df = pd.read_excel('/content/Haoling peak time data (1).xlsx')
# 计算时间对应的当天总秒数
df['Start_Seconds'] = df['ORDER START TIME'].apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)
df['End_Seconds'] = df['ORDER END TIME'].apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)
# 计算秒级差值,按需转换为分钟/小时
df['Difference_Seconds'] = df['End_Seconds'] - df['Start_Seconds']
df['Difference_Minutes'] = df['Difference_Seconds'] / 60

场景2:存在跨天订单(需结合日期信息)

如果数据包含单独的日期列(如ORDER DATE),先合并日期和时间为完整的datetime,再处理跨天情况:

import pandas as pd

df = pd.read_excel('/content/Haoling peak time data (1).xlsx')
# 合并日期和时间为完整datetime
df['Full_Start'] = pd.to_datetime(df['ORDER DATE'].astype(str) + ' ' + df['ORDER START TIME'].astype(str))
df['Full_End'] = pd.to_datetime(df['ORDER DATE'].astype(str) + ' ' + df['ORDER END TIME'].astype(str))

# 处理跨天情况:若结束时间早于开始时间,说明跨天,给结束时间加1天
mask = df['Full_End'] < df['Full_Start']
df.loc[mask, 'Full_End'] += pd.Timedelta(days=1)

# 计算最终时间差
df['Difference'] = df['Full_End'] - df['Full_Start']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:30:44