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

Python计算两时间列分钟差值:解决datetime转换报错问题

解决datetime.time类型无法转换为datetime计算时间差的问题

你遇到的报错是因为pd.to_datetime无法直接转换datetime.time对象——这类对象只有时间部分,缺少日期信息,不符合datetime的解析要求。以下是两种可行的解决方案:

方案1:结合基准日期转换为datetime后计算差值

通过给time对象补充一个基准日期(比如当天日期),将其转换为完整的datetime对象,再计算时间差:

import pandas as pd
from datetime import datetime

# 假设你的数据存储在DataFrame df中
# 为time对象添加基准日期,转换为datetime类型
df['Start_dt'] = df['Start'].apply(lambda t: datetime.combine(datetime.today(), t))
df['HT_dt'] = df['HT'].apply(lambda t: datetime.combine(datetime.today(), t))

# 计算时间差并转换为分钟
df['diff(in minutes)'] = (df['HT_dt'] - df['Start_dt']).dt.total_seconds() // 60

# 保留原列和结果列,移除中间辅助列
df = df[['Start', 'HT', 'diff(in minutes)']]

方案2:直接计算time对象的秒数差

跳过datetime转换,直接提取time对象的时分秒计算总秒数,再转换成分钟差:

import pandas as pd

def calc_minute_diff(start_time, end_time):
    # 计算单个time对象的总秒数
    start_total = start_time.hour * 3600 + start_time.minute * 60 + start_time.second
    end_total = end_time.hour * 3600 + end_time.minute * 60 + end_time.second
    # 返回分钟差
    return (end_total - start_total) // 60

# 应用到DataFrame的每一行
df['diff(in minutes)'] = df.apply(lambda row: calc_minute_diff(row['Start'], row['HT']), axis=1)

两种方案都能得到你预期的结果:

StartHTdiff(in minutes)
09:30:0009:40:0010
09:30:0009:36:006
09:30:0009:50:0020
09:30:0010:36:0066

内容的提问来源于stack exchange,提问作者Divyansh Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:10:31