2016-08-11 5 views
3

Schnelle Frage: Gibt es eine Möglichkeit, 'dropna' mit der Pearsons r-Funktion in scipy zu verwenden? Ich benutze es in Verbindung mit Pandas und einige meiner Daten haben Löcher darin. Ich weiß, dass du in der Lage war, 'nan' mit Spearmans r in older versions of scipy zu unterdrücken, aber diese Funktionalität fehlt jetzt.Dropping 'nan' mit Pearson's in scipy/pandas

In meinen Augen scheint dies eine Verschlechterung zu sein, also frage ich mich, ob ich etwas Offensichtliches vermisse.

Mein Code:

for i in range(len(frame3.columns)):  
    correlation.append(sp.pearsonr(frame3.iloc[ :,i], control['CONTROL'])) 
+0

Ja, Sie können 'dropna' dafür verwenden. Was ist deine Frage genau? –

+0

Wirklich? Jedes Mal, wenn ich es anhefte, erhalte ich einen Indexfehler. Ich habe meinen obigen Code hinzugefügt. Wo ist der richtige Platz dafür? – Lodore66

+1

* "... diese Funktionalität fehlt jetzt." * Beziehen Sie sich auf das Argument 'nan_policy'? Das ist immer noch "Speerman". Tatsächlich ist der Link, den Sie als "ältere Versionen" bezeichnet haben, die Dokumentation für das neueste Release, 0.18.0. Welche Version verwendest du? Überprüfen Sie, indem Sie 'import scipy; print (scipy .__ Version __) ' –

Antwort

4

Sie np.isnan wie diese verwenden:

for i in range(len(frame3.columns)):  
    x, y = frame3.iloc[ :,i].values, control['CONTROL'].values 
    nas = np.logical_or(x.isnan(), y.isnan()) 
    corr = sp.pearsonr(x[~nas], y[~nas]) 
    correlation.append(corr) 
+0

Fantastisch! Das funktioniert gut. Vielen Dank! – Lodore66

+0

Gern geschehen. Viel Glück. –

1

Sie können auch temporäre Datenrahmen versuchen zu schaffen, und verwendet Pandas integrierte Methode für pearson Korrelationsberechnungs oder Verwendung die .dropna-Methode im temporären Datenrahmen, um vor der Verwendung von sp.pearson Nullwerte zu erzeugen.

+0

Das macht einige Annahmen über den Beitritt, zB: die Indizes sind kompatibel –