2012-07-23 3 views
6

Ich habe eine 200.000 x 500 dataframe in Pandas geladen. Gibt es eine Funktion, die mir automatisch sagen kann, in welchen Spalten Daten fehlen? Oder muss ich über jede Spalte iterieren und Element für Element prüfen?Umgang mit fehlenden Daten in Pandas

Sobald ich ein fehlendes Element gefunden habe, wie definiere ich eine benutzerdefinierte Funktion (basierend auf dem Spaltennamen und einige andere Daten in der gleichen Zeile), um automatische Ersetzungen durchzuführen. Ich sehe die fillna() Methode, aber ich glaube nicht, dass es eine (Lambda) Funktion als Eingabe benötigt.

Danke!

Antwort

7

so etwas wie:

import pandas as pd 
pd.isnull(frame).any() 

ist wahrscheinlich das, was Sie suchen Lambda-Funktionen suchen fehlende Daten

fillna zur Zeit nicht statt, obwohl das auf GitHub in den Werken als offene Frage ist.

Sie können DataFrame.apply jetzt zum benutzerdefinierten Füllen verwenden. Aber können Sie etwas genauer spezifizieren, was Sie tun müssen, um die Daten zu füllen? Nur neugierig, was der Anwendungsfall ist.

+0

Danke! Ich habe das für einen Kaggle-Wettbewerb benutzt; Wir bekamen einen Datensatz mit Musikbewertungen von verschiedenen Nutzern und mussten ein Modell erstellen, das vorhersagte, wie diese Nutzer neue Tracks von verschiedenen Künstlern bewerten würden. Eine meiner Funktionen für den Klassifikator war es, sich die durchschnittliche Bewertung eines bestimmten Künstlers von diesem bestimmten Benutzer anzusehen. Aber wenn der Benutzer diesen Künstler noch nie zuvor gehört hatte, würde dieser Eintrag in Pandas als fehlender Wert angezeigt werden. In diesem Fall würde ich diesen fehlenden Wert durch die Durchschnittsbewertung ersetzen, die dem Künstler gegeben wurde (eine schlechte erste Annäherung, besser, die SVD zu benutzen). – vgoklani

+0

Ah ich sehe. Ich vermute, Sie haben so etwas wie Benutzer als Index und Künstler/Track als MultiIndex von Spalten? Es hängt von der Größe Ihres Dataframes ab, aber Sie könnten möglicherweise die Durchschnittsbewertung wiederholen, sodass sie dieselbe Größe wie die Bewertungsmatrix hat und dann die NA-Maske verwenden, um die fehlenden Werte zu ersetzen. –

+0

schließen; Ich habe eine read_csv auf den Trainingsdaten gemacht, aber ich habe keinen Index gewählt. Ich habe die Features mithilfe der pandas group-Operationen erstellt, dann die mean() -Methode auf die Gruppe angewendet und schließlich eine Verknüpfung mit dem Hauptdatenrahmen hergestellt. Einige der Features verwenden Daten aus mehreren Spalten. Daher habe ich sie nur mit diesen Spaltenbeschriftungen gruppiert und dann wieder zusammengeführt (mit mehreren Indizes). Danke für das Cythonizing der Merges :) Für die fehlenden Daten musste ich manuell die Schleife durchlaufen und get_value/set_value benutzen, es ist nicht der effizienteste Weg, aber es funktioniert. – vgoklani

Verwandte Themen