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

如何对pandas.core.series.Series类型的datetime.time数据求和?

解决pandas Series中datetime.time类型求和的TypeError问题

这个报错的原因其实很好理解:Python内置的sum()函数默认是从**0(整数类型)**开始累加的,可你Series里的元素都是datetime.time对象,整数和时间对象根本没法直接做加法,所以才抛出了这个TypeError。下面给你几个实用的解决办法:

方法1:用pandas的to_timedelta转换后求和(最推荐)

直接把Series里的时间字符串转换成timedelta(时间差)类型,pandas对这种类型的求和支持非常友好:

import pandas as pd

# 将时间字符串转为timedelta类型
time_deltas = pd.to_timedelta(df.data1)
# 直接调用sum方法求和
total_duration = time_deltas.sum()

# 如果需要格式化输出成时分秒格式
hours = total_duration.components.hours
minutes = total_duration.components.minutes
seconds = total_duration.components.seconds
print(f"总时长:{hours:02d}:{minutes:02d}:{seconds:02d}")

方法2:手动遍历累加,指定初始值为timedelta

如果你不想转换整个Series的类型,可以手动把每个datetime.time对象转成timedelta,再用sum()指定初始值为timedelta(0)(避免默认的int初始值):

from datetime import timedelta

# 生成一个timedelta的生成器,再指定初始值求和
total_duration = sum(
    (timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) for t in df.data1),
    start=timedelta(0)
)

print(total_duration)

方法3:结合datetime对象转换计算

把每个datetime.time和固定日期结合成datetime对象,再通过差值计算总时长:

from datetime import datetime, date

# 把每个time对象转成当天的datetime
datetime_series = df.data1.apply(lambda t: datetime.combine(date.today(), t))
# 计算每个datetime与当天0点的差值,再求和
total_duration = sum(
    (dt - datetime.combine(date.today(), datetime.min.time()) for dt in datetime_series),
    start=timedelta(0)
)

print(total_duration)

重要提醒:

如果你的总时长超过24小时,datetime.time类型是没法表示的(它只能存储一天内的时间),所以更推荐用timedelta类型来保存总时长,它可以轻松处理跨天的时间总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:58:10