Pandas:计算整个数据框架的平均值或标准差

2024-04-19 00:20:11 发布

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

这是我的问题,我有一个这样的数据帧:

    Depr_1  Depr_2  Depr_3
S3  0   5   9
S2  4   11  8
S1  6   11  12
S5  0   4   11
S4  4   8   8

我只想计算整个数据帧的平均值,因为下面的方法不起作用:

df.mean()

然后我想到:

df.mean().mean()

但是这个技巧不适用于计算标准差。我最后的尝试是:

df.get_values().mean()
df.get_values().std()

除了在后一种情况下,它使用numpy中的mean()和std()函数。这对mean来说不是问题,但对于std来说是问题,因为pandas函数默认使用ddof=1,而numpy函数使用ddof=0


Tags: 数据函数numpydfgets3meandepr
1条回答
网友
1楼 · 发布于 2024-04-19 00:20:11

您可以使用stack将数据帧转换为单个列(这会将形状从5x3更改为15x1),然后采用标准偏差:

df.stack().std()         # pandas default degrees of freedom is one

或者,在获取标准偏差之前,可以使用values将pandas数据帧转换为numpy数组:

df.values.std(ddof=1)    # numpy default degrees of freedom is zero

与pandas不同,numpy默认情况下会给出整个数组的标准差,因此在获取标准差之前不需要重新调整形状。

一些附加说明:

  • 这里的numpy方法比pandas方法快一点,当您可以选择使用numpy或pandas完成相同的事情时,这通常是正确的。速度差异将取决于数据的大小,但当我在笔记本电脑上测试几个不同大小的数据帧时,numpy的速度大约快了10倍(numpy版本1.15.4和pandas版本0.23.4)。

  • numpy和pandas在这里的接近不会给出完全相同的答案,但会非常接近(精确到几个数字相同)。这种差异是由于后台实现中的细微差异造成的,这些差异会影响浮点值的舍入方式。

相关问题 更多 >