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

时间:2018-07-25 20:15:53

标签: python pandas datetime time

我正在使用python中的pand处理时间。 我想总结一下两个日期之间经过的时间:

0   2012-03-06 14:22:00
0   2012-06-02 11:29:00


1   2012-04-16 20:51:00
1   2012-04-28 09:57:00

要做到这一点,我计算出索引为0的前两个日期之间的时间,如下所示:

dt0 = df.end[0] - df.start[0]  
out: 87 days 21:07:00
dtype: timedelta64[ns]

,并且在接下来的两个日期之间相同,例如:

dt1 = df.end[1] - df.start[1]  
out: 11 days 13:06:00
dtype: timedelta64[ns]

哪个工作正常,但是当我将两次相加时:

dt2 = dt1 + dt0 

我得到dt2 = NaT,而不是87天21:07:00 + 11天13:06:00的总和。有人可以帮忙吗?

下面是同一问题的另一个示例的屏幕截图:将a和b加起来,两个dtype:timedelta64 [ns]不起作用,为什么?

enter image description here

1 个答案:

答案 0 :(得分:2)

看,这就是为什么我明确希望您打印类型的原因。 dt1dt0不是<class 'pandas._libs.tslibs.timedeltas.Timedelta'>,它们是pandas.Series

当您添加两个Series时,它会根据索引对齐。由于dt1dt2不共享相同的索引,因此它将用空值(在这种情况下为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]')

但是实际上,您应该更改代码,以使dt0dt1仅是实际上不需要pd.Series的值。