2017-02-02 6 views
0

Haben Pandas eine Analog zu dplyr's Filter() Operation? Grundsätzlich möchte ich in der Lage sein, Zeilen basierend auf einem Prädikat zu entfernen.Wie lösche ich Zeilen aus einem Pandas DataFrame mit Methodenverkettung?

Ich kann natürlich df = df[condition] tun, aber das ist nicht so gut wie Methodenverkettung komponieren.

+0

Pandas hat eine [ 'filter'] (http://pandas.pydata.org zurück /pandas-docs/stable/generated/pandas.DataFrame.filter.html#pandas.DataFrame.filter) Methode, aber dies erfordert eine Sequenz von Labels, im Allgemeinen würde man das Prädikat verwenden, um eine Maske zu erstellen und diese – EdChum

Antwort

0

Verwendung query

Betrachten Sie die Datenrahmen df

df = pd.DataFrame(
    np.random.randint(-5, 6, (10, 10)), 
    columns=list('ABCDEFGHIJ')) 

df 

    A B C D E F G H I J 
0 0 4 -1 1 -3 -1 -4 -5 -1 2 
1 -4 2 -1 0 5 -1 1 -3 1 4 
2 3 -2 3 -2 -4 5 1 1 0 -2 
3 1 4 -5 4 -3 -3 -3 -3 -4 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
7 5 2 5 2 3 2 3 -3 1 1 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

Sie können leicht Pipeline-Operationen basierend auf Filterbedingungen

df.query('A < 0') 

    A B C D E F G H I J 
1 -4 2 -1 0 5 -1 1 -3 1 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

Sie können mehrere Bedingungen

df.query('A < 0 & B < -1') 

    A B C D E F G H I J 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 
umfassen

Sie können viele coole Dinge tun

df.query('-3 < A < 3 & H * J > 0') 

    A B C D E F G H I J 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
8 -2 -5 1 4 0 -1 4 4 -5 3 

Und alles wird als ein Datenrahmen zu ermöglichen, die nächste Operation

+0

tut dies mit arbeiten Prädikate für nicht-numerische Spalten? – daj

+0

Ja, wenn Sie Beispieldaten bereitstellen und was Sie damit machen möchten. Wir können Ihnen zeigen, wie es geht. – piRSquared

+0

Was ist, wenn ich eine kompliziertere Funktion übergeben möchte oder nicht durch eine solche Zeichenfolge codieren möchte? Gibt es eine andere Option? – mdeland

Verwandte Themen