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

如何在Python中根据起止时间创建时长列?解决类型错误问题

问题原因与解决方法

错误原因

你遇到的TypeError是因为你的Clock_Start和Clock_Stop列虽然标记为object类型,但实际存储的是datetime.time对象——Python的datetime.time类型不支持直接做减法运算,只有包含日期+时间的datetime.datetime类型相减,才能得到可计算的timedelta对象。

解决方案

要计算小时级别的时长,你需要先把时间数据转换成datetime.datetime类型,再进行计算:

步骤1:将时间列转为datetime类型

  • 如果你的Clock_Start和Clock_Stop是字符串格式的时间(比如"08:15:30"),直接用pd.to_datetime转换即可,函数会自动为时间补充当天的日期:
df['Clock_Start_dt'] = pd.to_datetime(df['Clock_Start'])
df['Clock_Stop_dt'] = pd.to_datetime(df['Clock_Stop'])
  • 如果你的列已经是datetime.time对象,可以结合固定日期(比如当天)构造datetime.datetime:
from datetime import date, datetime

df['Clock_Start_dt'] = df['Clock_Start'].apply(lambda x: datetime.combine(date.today(), x))
df['Clock_Stop_dt'] = df['Clock_Stop'].apply(lambda x: datetime.combine(date.today(), x))

步骤2:计算小时级时长

用转换后的datetime列相减,通过total_seconds()将timedelta转换为总秒数,再除以3600得到小时数(结果为浮点数,符合你需要的1.424这类格式):

df['Duration'] = (df['Clock_Stop_dt'] - df['Clock_Start_dt']).dt.total_seconds() / 3600

可选:简化写法

如果确认所有时间都属于同一天,也可以合并成一行代码:

df['Duration'] = (pd.to_datetime(df['Clock_Stop']) - pd.to_datetime(df['Clock_Start'])).dt.total_seconds() / 3600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:31