2015-04-22 14 views
5

per esempio ho un dataframe panda, che appare come:Deviazione standard per DF, panda

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

voglio calcolare la deviazione standard per tutti i valori in questo DF. La funzione df.std() restituisce i valori pro column.

Certo che posso creare il codice successivo:

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

E 'possibile fare questo codice più semplice e utilizzare alcune funzioni panda per questo DF?

+1

Possibile duplicato di [Panda: calcolo medio o std (deviazione standard) sull'intero dataframe] (http://stackoverflow.com/questions/25140998/pandas-compute-mean-or-std-standard-deviation-over- whole-dataframe) –

risposta

5

df.values restituisce una matrice NumPy contenente i valori in df. Si potrebbe quindi applicare np.std a tale matrice:

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

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

bene, grazie mille – Guforu

+2

Penso che anche 'np.std (df.values)' funzionerebbe anche. –

+1

@ajcr: Oh sì, hai ragione. Grazie. – unutbu

2

Un'alternativa, se vi piace l'idea di "fare un vettore di tutti i vostri valori" e poi prendendo la sua deviazione standard:

df.stack().std() 

Ma grande nota qui: per favore ricordate che i panda std funzioni assumono un denominatore diverso (gradi di libertà) di NumPy std funzioni in modo che:

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.) 

rendimenti:

2.58198889747 
2.73861278753 
2.58198889747 

Il numero al centro è diverso! Non è un errore di battitura!

+0

ok, questo è anche molto utile, grazie – Guforu

+0

Buon punto. Si noti inoltre che esiste un argomento 'ddof' per entrambi i panda e numpy' std' in modo da renderli equivalenti. – JohnE

Problemi correlati