这是我的问题,我有一个这样的数据帧:
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
。
您可以使用
stack
将数据帧转换为单个列(这会将形状从5x3更改为15x1),然后采用标准偏差:或者,在获取标准偏差之前,可以使用
values
将pandas数据帧转换为numpy数组:与pandas不同,numpy默认情况下会给出整个数组的标准差,因此在获取标准差之前不需要重新调整形状。
一些附加说明:
这里的numpy方法比pandas方法快一点,当您可以选择使用numpy或pandas完成相同的事情时,这通常是正确的。速度差异将取决于数据的大小,但当我在笔记本电脑上测试几个不同大小的数据帧时,numpy的速度大约快了10倍(numpy版本1.15.4和pandas版本0.23.4)。
numpy和pandas在这里的接近不会给出完全相同的答案,但会非常接近(精确到几个数字相同)。这种差异是由于后台实现中的细微差异造成的,这些差异会影响浮点值的舍入方式。
相关问题 更多 >
编程相关推荐