In Datenanalyseszenarien ist die Anwendung mehrerer Filter zur Eingrenzung der Ergebnisse oft entscheidend. In diesem Artikel geht es um einen effizienten Ansatz zur Verkettung mehrerer Vergleichsoperationen an Pandas-Datenobjekten.
Das Ziel besteht darin, ein Wörterbuch relationaler Operatoren zu verarbeiten und diese additiv auf einen bestimmten Pandas anzuwenden Serie oder DataFrame, was zu einem gefilterten Datensatz führt. Dieser Vorgang erfordert die Minimierung unnötiger Datenkopien, insbesondere beim Umgang mit großen Datensätzen.
Pandas bietet einen hocheffizienten Mechanismus zum Filtern von Daten mithilfe der booleschen Indizierung. Bei der booleschen Indizierung werden logische Bedingungen erstellt und die Daten dann anhand dieser Bedingungen indiziert. Betrachten Sie das folgende Beispiel:
<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>
Diese Codezeile wählt alle Zeilen im DataFrame df aus, in denen der Wert in der Spalte „col1“ größer oder gleich 1 ist. Das Ergebnis ist ein neues Series-Objekt, das Folgendes enthält die gefilterten Werte.
Um mehrere Filter anzuwenden, können wir boolesche Bedingungen mit logischen Operatoren wie & kombinieren. (und) und | (oder). Zum Beispiel:
<code class="python">df[(df['col1'] >= 1) & (df['col1'] <= 1)]
Dieser Vorgang filtert Zeilen, in denen „col1“ sowohl größer oder gleich 1 als auch kleiner oder gleich 1 ist.
Um den Prozess der Anwendung mehrerer Filter zu vereinfachen, können wir Hilfsfunktionen erstellen:
<code class="python">def b(x, col, op, n): return op(x[col], n) def f(x, *b): return x[(np.logical_and(*b))]
Die b-Funktion erstellt eine boolesche Bedingung für eine bestimmte Spalte und einen bestimmten Operator, während f mehrere boolesche Bedingungen auf einen DataFrame oder eine Serie anwendet.
Um diese Funktionen zu verwenden, können wir ein Wörterbuch mit Filterkriterien bereitstellen:
<code class="python">filters = {'>=': [1], '<=': [1]}</code>
<code class="python">b1 = b(df, 'col1', ge, 1) b2 = b(df, 'col1', le, 1) filtered_df = f(df, b1, b2)</code>
Dieser Code wendet die Filter auf „col1“ an. Spalte im DataFrame df und gibt einen neuen DataFrame mit den gefilterten Ergebnissen zurück.
Pandas 0.13 führte die Abfragemethode ein, die eine bequeme Möglichkeit bietet, Filter mithilfe von Zeichenfolgenausdrücken anzuwenden. Für gültige Spaltenbezeichner wird der folgende Code möglich:
<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>
Diese Zeile erreicht die gleiche Filterung wie unser vorheriges Beispiel unter Verwendung einer prägnanteren Syntax.
Durch die Verwendung von boolescher Indizierung und Hilfsfunktionen Wir können mehrere Filter effizient auf Pandas-Datenrahmen und -Serien anwenden. Dieser Ansatz minimiert das Kopieren von Daten und verbessert die Leistung, insbesondere bei der Arbeit mit großen Datensätzen.
Das obige ist der detaillierte Inhalt vonWie filtert man Pandas-Datenobjekte mithilfe der booleschen Indizierung effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!