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

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-20 11:57:30574Durchsuche

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>

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.

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))]

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>
<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.

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>

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!

Stellungnahme:
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