Pandas:计算整个数据帧的均值或标准差(标准差)

时间:2014-08-05 14:14:24

标签: python numpy pandas

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

    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()函数。这对于平均值来说不是问题,但它适用于std,因为pandas函数默认使用ddof=1,与ddof=0中的numpy函数不同。

1 个答案:

答案 0 :(得分:39)

您可以将数据框转换为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方法不会给出完全相同的答案,但会非常接近(精度的几位数相同)。差异是由于影响浮点值四舍五入的幕后实现的细微差别。