这是我的问题,我有一个这样的数据框:
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函数不同。
答案 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方法不会给出完全相同的答案,但会非常接近(精度的几位数相同)。差异是由于影响浮点值四舍五入的幕后实现的细微差别。