首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在pandas/Python中对dtype: timedelta64[ns]求和?

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

Stack Overflow用户
提问于 2018-07-26 04:15:53
回答 1查看 730关注 0票数 2

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

代码语言:javascript
复制
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的前两个日期之间经过的时间,如下所示:

代码语言:javascript
复制
dt0 = df.end[0] - df.start[0]  
out: 87 days 21:07:00
dtype: timedelta64[ns]

在接下来的两个日期之间也是一样的:

代码语言:javascript
复制
dt1 = df.end[1] - df.start[1]  
out: 11 days 13:06:00
dtype: timedelta64[ns]

这很好用,但当我将这两次相加时:

代码语言:javascript
复制
dt2 = dt1 + dt0 

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

下面是同一问题的另一个例子的屏幕截图:将a和b相加,两个dtype: timedelta64ns不工作,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 05:21:35

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

当您添加两个Series时,它会根据索引对齐。由于dt1dt2不共享相同的索引,因此它使用空值(在本例中为NaT)填充缺少的值,然后执行加法。默认情况下,它在执行加法时不会忽略空值,所以您看到的是x + NaT = NaT,这就是数学原理。

样本数据

代码语言:javascript
复制
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

代码语言:javascript
复制
a+b
#16992   NaT
#21005   NaT
#dtype: timedelta64[ns]

您真正想要做的是将这些值相加,而不考虑索引:

代码语言:javascript
复制
a.values+b.values
#array([259200000000000], dtype='timedelta64[ns]')

但实际上,您应该更改您的代码,以便如果您实际上不需要pd.Series,则dt0dt1只是值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51527011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档