2015-04-22 45 views
5

,比如我有一个熊猫据帧,它看起来如下:为DF标准差,熊猫

a b c 
1 2 3 
4 5 6 
7 8 9 

我要计算这个DF所有值的标准差。函数df.std()让我回到pro专栏的值。

当然,我可以创造下一个代码:

sd = [] 
sd.append(list(df['a'])) 
sd.append(list(df['b'])) 
sd.append(list(df['c'])) 
numpy.std(sd) 

是否有可能做到这一点的代码更简单,使用一些功能大熊猫这个DF?

+1

[Pandas:整个数据帧计算平均值或标准差(标准偏差)]的可能重复项(http://stackoverflow.com/questions/25140998/pandas-compute-mean-or-std-standard-deviation-over-整个数据帧) –

回答

5

df.values返回包含df中的值的NumPy数组。然后,您可以申请np.std该数组:

In [52]: np.std(sd) 
Out[52]: 2.5819888974716112 

In [53]: np.std(df.values) 
Out[53]: 2.5819888974716112 
+0

很好,非常感谢你 – Guforu

+2

我觉得'np.std(df.values)'也可以。 –

+1

@ajcr:哦,是的,你是对的。谢谢。 – unutbu

2

的选择,如果你喜欢“让所有你的价值观的载体”,然后利用其标准偏差的想法:

df.stack().std() 

但大注的位置:请记住,大熊猫std功能承担不同的分母(自由度)比numpy的std功能使:

df = pd.DataFrame(np.arange(1, 10).reshape(3, 3), columns=list('abc')) 
print np.std(df.values) 
print df.stack().std() 
print df.stack().std() * np.sqrt(8./9.) 

产量:

2.58198889747 
2.73861278753 
2.58198889747 

中间的数量是不同的!不是错字!

+0

好的,这个也很有用,谢谢 – Guforu

+0

好点。还要注意,对于熊猫和numpy“std”都有一个'ddof'参数,所以你可以使它们等价。 – JohnE