„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie filtert man Pandas-Datenobjekte mithilfe der booleschen Indizierung effizient?

Wie filtert man Pandas-Datenobjekte mithilfe der booleschen Indizierung effizient?

Veröffentlicht am 01.11.2024
Durchsuche:929

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

Effiziente Filterung von Pandas-Datenrahmen und -Serien mithilfe der booleschen Indizierung

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.

Die Herausforderung

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.

Lösung: Boolesche Indizierung

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.

Hilfsfunktionen

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.

Verwendungsbeispiel

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729395079 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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