pdelas rolling_mean of timedelta64生成float64

时间:2015-11-17 13:20:59

标签: python pandas

在我的代码here(json数据源there)中,我想计算timedelta对象的滚动平均值:

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

df.dtypes返回如下,dtd列的timedelta64 [ns]和rm5&的float64。由rolling_mean

产生的rm10列
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

令我惊讶的是,结果是一个float64(列rm5和rm10) 一些快速的谷歌搜索向我展示了closed bug

这是打算的吗?理想情况下,我希望rolling_mean结果保持timedelta64 [ns]

编辑:我仍然可以做df['rm5td'] = pd.to_timedelta(df['rm5']),但我发现了自动投射

1 个答案:

答案 0 :(得分: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更适用于我。