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

使用Pandas计算工作时长时遭遇TypeError:timedelta64[ns]与int类型无效比较问题的解决咨询

解决时间差计算工作时长的问题

看起来你遇到的核心问题是时间字符串的类型转换不彻底,导致后续减法操作出现类型不匹配的错误。下面给你两种可靠的解决方案,同时分析下错误的根源:

错误原因分析

你提到的TypeError: Invalid comparison between dtype=timedelta64[ns] and int,大概率是因为部分数据没有成功转换为时间/时间差类型(比如某几行还是字符串或整数),或者转换过程中混合了不同类型的数据,导致减法时出现类型冲突。


方案一:用pd.to_datetime转换后计算差值

因为你的数据是纯24小时制时间字符串(如13:00),直接转datetime时pandas会自动补充当前日期,但这不会影响时间差的计算(因为日期部分相同),步骤如下:

import pandas as pd

# 1. 确保时间列是字符串类型(如果不是先转换)
df['T1 Start'] = df['T1 Start'].astype(str)
df['T1 Finish'] = df['T1 Finish'].astype(str)

# 2. 明确指定格式转换为datetime类型,避免自动推断出错
df['T1 Start'] = pd.to_datetime(df['T1 Start'], format='%H:%M')
df['T1 Finish'] = pd.to_datetime(df['T1 Finish'], format='%H:%M')

# 3. 计算时间差并转换为小时数(支持小数,比如1.5小时=90分钟)
df['Hours'] = (df['T1 Finish'] - df['T1 Start']).dt.total_seconds() / 3600

方案二:直接用pd.to_timedelta转换为时间差

这种方法更直接,我们只关心时间点相对于当天0点的时长,步骤如下:

import pandas as pd

# 1. 把时间字符串直接转成timedelta(比如"13:00"会被解析为13小时的时间差)
df['Start_delta'] = pd.to_timedelta(df['T1 Start'].astype(str))
df['Finish_delta'] = pd.to_timedelta(df['T1 Finish'].astype(str))

# 2. 计算工作时长(小时)
df['Hours'] = (df['Finish_delta'] - df['Start_delta']) / pd.Timedelta(hours=1)

这里pd.to_timedelta可以直接解析HH:MM格式的字符串为时间差,两个时间差相减后除以pd.Timedelta(hours=1)就能得到小时数,结果同样支持小数。


额外注意事项

  • 如果你的数据存在跨天情况(比如开始时间22:00,结束时间次日02:00),方案一需要确保日期部分正确(补充日期信息),否则会得到负数;方案二需要判断结束时间的delta小于开始时间时,加24小时修正。
  • 转换前建议检查异常值,用errors='coerce'把无效格式转为NaT,方便后续处理:
    df['T1 Start'] = pd.to_datetime(df['T1 Start'].astype(str), format='%H:%M', errors='coerce')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:32:41