为了账号安全,请及时绑定邮箱和手机立即绑定

如何在熊猫/ Python中对dtype:timedelta64 [ns]求和?

如何在熊猫/ Python中对dtype:timedelta64 [ns]求和?

catspeake 2021-05-06 15:13:11
我正在使用python中的pand处理时间。我想总结一下两个日期之间经过的时间:0   2012-03-06 14:22:000   2012-06-02 11:29:001   2012-04-16 20:51:001   2012-04-28 09:57:00为此,我计算用0索引的前两个日期之间经过的时间,如下所示:dt0 = df.end[0] - df.start[0]  out: 87 days 21:07:00dtype: timedelta64[ns]在接下来的2个日期之间也一样:dt1 = df.end[1] - df.start[1]  out: 11 days 13:06:00dtype: timedelta64[ns]哪个工作正常,但是当我两次相加时:dt2 = dt1 + dt0 我得到dt2 = NaT而不是87天21:07:00 + 11天13:06:00的总和。有人可以帮忙吗?下面是相同问题的另一个示例的屏幕截图:将a和b加起来,两个dtype:timedelta64 [ns]不起作用,为什么?
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

瞧,这就是为什么我明确希望您打印类型。dt1而dt0不是<class 'pandas._libs.tslibs.timedeltas.Timedelta'>,他们是pandas.Series。


当您添加两个时,Series它会根据索引对齐。由于dt1和dt2不共享相同的索引,因此它将用空值填充缺失值(NaT在这种情况下),然后执行加法。默认情况下,执行加法时它不会忽略空值,因此您所看到的是x + NaT = NaT数学的工作方式。


样本数据

import pandas as pd


a = pd.Series(pd.Timedelta(1,'d'), index=[21005])

#21005   1 days

#dtype: timedelta64[ns]


b = pd.Series(pd.Timedelta(2,'d'), index=[16992])

#16992   2 days

#dtype: timedelta64[ns]

代码

加法将与索引对齐。他们没有指数,所以你得到NaT。


a+b

#16992   NaT

#21005   NaT

#dtype: timedelta64[ns]

您真正想要做的就是添加值,而不管索引如何:


a.values+b.values

#array([259200000000000], dtype='timedelta64[ns]')

不过说真的,你应该改变你的代码,以便dt0和dt1只是值,如果你真的没有必要为pd.Series。


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号