时间平均值Delta64产生浮点64

2024-10-03 02:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

df.dtypes返回如下:timedelta64[ns]表示dtd列,float64表示由滚动平均值产生的rm5和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) 一些快速的google给我看了这个closed bug

是有意的吗?理想情况下,我希望滚动平均结果保持timedelta64[ns]

编辑:我仍然可以做一个df['rm5td'] = pd.to_timedelta(df['rm5']),但是我发现了自动转换wierd


Tags: 代码dfobjecttimetimedelta平均值pddtd
1条回答
网友
1楼 · 发布于 2024-10-03 02:39:04

说这是有意的可能有点夸张,但这显然是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

I can still do a df['rm5td'] = pd.to_timedelta(df['rm5']) but I found the automatic cast wierd

平均来说,pd.to_datetime似乎比pd.to_timedelta更适合我。你知道吗

相关问题 更多 >