2015-04-22 223 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