sum()无法对pandas.Timedelta对象列表求和的原因及解决方法
现象是否符合预期
该现象完全符合预期。Python内置sum()函数默认的初始累加值为整数0,执行求和时会先计算0 + 第一个Timedelta对象,而整数和pandas.Timedelta类型没有定义合法的加法操作,因此会抛出TypeError,属于正常行为。
无需显式遍历的求和方法
以下方法都不需要手动编写for循环遍历列表即可完成求和:
- 方法1:修改sum函数的初始值参数
给sum()指定start参数为0值Timedelta即可直接求和:import pandas as pd total = sum(r, start=pd.Timedelta(0))注:sum函数的start参数在Python 3.8及以上版本可用,低版本Python可优先使用后两种方法。
- 方法2:借助pandas内置的求和能力
将列表转为pandas Series后调用自带的sum方法,原生支持Timedelta类型求和:import pandas as pd total = pd.Series(r).sum() - 方法3:使用functools.reduce实现累加
通过reduce操作隐式完成遍历累加:from functools import reduce import operator total = reduce(operator.add, r)
内容的提问来源于stack exchange,提问作者alec_djinn
相关产品推荐
相关产品推荐

