2015-11-17 88 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