在我的代码here(json数据源there)中,我想计算timedelta对象的滚动平均值:
df['rm5'] = pd.rolling_mean(df['dtd'], window=5)
df.dtypes
返回如下,dtd列的timedelta64 [ns]和rm5&的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
令我惊讶的是,结果是一个float64(列rm5和rm10) 一些快速的谷歌搜索向我展示了closed bug
这是打算的吗?理想情况下,我希望rolling_mean结果保持timedelta64 [ns]编辑:我仍然可以做df['rm5td'] = pd.to_timedelta(df['rm5'])
,但我发现了自动投射
答案 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
更适用于我。