2014-02-24 62 views
0

據熊貓0.13.1手冊,可以減少numpy的timedelta64系列:pandas:使用sum()減少timedelta64結果int64?

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

看起來像一個bug,剛剛提出這樣的: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] 
+0

謝謝;我的解決方法略有不同;首先轉換所有內容,即's = s/np.timedelta64(1,「ms」)'所以一切都以毫秒爲單位,然後是s.sum()'。 – Luciano

+0

啊,bug解釋它。我正準備用這件衣服撕掉我的頭髮! Thx @Jeff和@Luciano! – Chrispy

+0

這是固定在master/0.14(即將推出)。 – Jeff