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:
df.loc[df['col1'] >= 1, 'col1']
Diese Codezeile wählt alle Zeilen im DataFrame df where aus Der Wert in der Spalte „col1“ ist größer oder gleich 1. Das Ergebnis ist ein neues Series-Objekt, das die gefilterten Werte enthält.
Um mehrere Filter anzuwenden, können wir boolesche Bedingungen mit logischen Operatoren wie & kombinieren. (und) und | (oder). Zum Beispiel:
df[(df['col1'] >= 1) & (df['col1'] <= 1)]
Dieser Vorgang filtert Zeilen, in denen „col1“ ist sowohl größer oder gleich 1 als auch kleiner oder gleich 1.
Um den Prozess der Anwendung mehrerer Filter zu vereinfachen, können wir Hilfsfunktionen erstellen:
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:
filters = {'>=': [1], 'b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)
Dieser Code wendet die Filter auf die Spalte „col1“ im DataFrame df an und gibt einen neuen DataFrame mit den gefilterten Ergebnissen zurück.
Erweiterte Funktionalität
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:
df.query('col1 Diese Zeile erreicht die gleiche Filterung wie unsere vorheriges Beispiel mit einer prägnanteren Syntax.
Durch die Verwendung boolescher Indizierung und Hilfsfunktionen können wir 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3