Heim > Backend-Entwicklung > Python-Tutorial > Wie filtert man Pandas-Datenobjekte mithilfe der booleschen Indizierung effizient?

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

Barbara Streisand
Freigeben: 2024-10-20 11:57:30
Original
659 Leute haben es durchsucht

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:

<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>
Nach dem Login kopieren

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)]
Nach dem Login kopieren

Dieser Vorgang filtert Zeilen, in denen „col1“ sowohl größer oder gleich 1 als auch kleiner oder gleich 1 ist.

Hilfsfunktionen

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))]
Nach dem Login kopieren

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:

<code class="python">filters = {'>=': [1], '<=': [1]}</code>
Nach dem Login kopieren
<code class="python">b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)</code>
Nach dem Login kopieren

Dieser Code wendet die Filter auf „col1“ an. Spalte im DataFrame df 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:

<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage