pandas:使用sum()减少timedelta64导致int64?

时间:2014-02-24 10:10:51

标签: numpy pandas

根据pandas 0.13.1手册,你可以减少numpy timedelta64系列:

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-deltas-reductions

这似乎可以正常使用,例如mean()

In[107]:
pd.Series(np.random.randint(0,100000,100).astype("timedelta64[ns]")).mean()
Out[107]:
0   00:00:00.000047
dtype: timedelta64[ns]

但是,使用sum(),这总是会产生一个整数:

In [108]:
pd.Series(np.random.randint(0,100000,100).astype("timedelta64[ns]")).sum()
Out[108]:
5047226

这是一个错误,还是例如溢出导致这个?将结果转换为timedelta64是否安全?我该如何解决这个问题?

我正在使用numpy 1.8.0。

1 个答案:

答案 0 :(得分:1)

看起来像一个错误,只是提交了这个:https://github.com/pydata/pandas/issues/6462

结果以纳秒为单位;作为解决方案,你可以做到这一点:

In [1]: s = pd.to_timedelta(range(4),unit='d')

In [2]: s
Out[2]: 
0   0 days
1   1 days
2   2 days
3   3 days
dtype: timedelta64[ns]

In [3]: s.mean()
Out[3]: 
0   1 days, 12:00:00
dtype: timedelta64[ns]

In [4]: s.sum()
Out[4]: 518400000000000

In [8]: pd.to_timedelta([s.sum()])
Out[8]: 
0   6 days
dtype: timedelta64[ns]