2015-11-17 44 views
0

在我的代碼here(JSON數據源there)我想計算timedelta對象的滾動平均值:大熊貓產生float64

df['rm5'] = pd.rolling_mean(df['dtd'], window=5) 

df.dtypes的返回如下,timedelta64 [NS]爲DTD中柱和float64用於從rolling_mean

Splits      int64 
Time       object 
Cumulative Time    object 
Moving Time     object 
Distance     float64 
Elev Gain      int64 
Elev Loss      int64 
td     timedelta64[ns] 
dc       float64 
dtd     timedelta64[ns] 
rm5       float64 
rm10      float64 
dtype: object 

產生的RM5 & RM10列令人驚訝地對我的結果是一個float64(列RM5和RM10) 一些快速的谷歌搜索向我展示了這個closed bug

這是打算?理想情況下,我想在rolling_mean結果留timedelta64 [NS]

編輯:我仍然可以做一個df['rm5td'] = pd.to_timedelta(df['rm5'])但我發現自動投怪異

回答

1

這可能是一種誇張地說,這是有意的,但它肯定是pandas.rolling_mean性質的簡單結果,它總是會返回一個float64(它靜態編碼爲C級)。

>>> x 
0 0.000000 
1 0.333333 
2 0.666667 
3 1.000000 
4 1.333333 
5 1.666667 
6 2.000000 
7 2.333333 
8 2.666667 
9 3.000000 
dtype: float32 
>>> pd.rolling_mean(x, 3) 
0   NaN 
1   NaN 
2 0.333333 
3 0.666667 
4 1.000000 
5 1.333333 
6 1.666667 
7 2.000000 
8 2.333333 
9 2.666667 
dtype: float64 
>>> y 
0  0j 
1 (1+0j) 
2 (2+0j) 
3 (3+0j) 
4 (4+0j) 
5 (5+0j) 
6 (6+0j) 
7  10j 
8 (8+0j) 
9 (9+0j) 
dtype: complex128 
>>> pd.rolling_mean(y, 3) 
0   NaN 
1   NaN 
2 1.000000 
3 2.000000 
4 3.000000 
5 4.000000 
6 5.000000 
7 3.666667 
8 4.666667 
9 5.666667 
dtype: float64 

我仍然可以做一個df['rm5td'] = pd.to_timedelta(df['rm5'])但我發現自動投怪異

對於一個平均,pd.to_datetime似乎更適用於我比pd.to_timedelta

+0

有很多意義,謝謝你的解釋。也許我很奇怪,但我發現它不是非常用戶友好,我不得不在timedelta64上對timedelta64項目進行操作,然後在matplotlib圖表中使用該timedelta64操作結果再次進行一些格式設置,以便我不要再得到一個浮動:) .... – euri10

+0

這只是不適用於非浮動類型,例如複雜/ timedelta DO需要特殊處理。開放的問題是[這裏](https://github.com/pydata/pandas/issues/11446) – Jeff

+0

謝謝@Jeff我會跟着這個問題,我應該看看回購第一:) – euri10