Wie man DataFrame-Zeilen auf der Grundlage von Spaltenwerten in Pandas filtert

Suraj Joshi 30 Januar 2023
  1. Auswahl von Pandas-Zeilen auf der Grundlage bestimmter Spaltenwerte
  2. Pandas-Zeilen auswählen, die keinen bestimmten Spaltenwert enthalten
  3. Pandas-Zeilen auswählen, deren Spaltenwerte größer oder kleiner als der spezifische Wert sind
  4. Auswahl von Pandas-Zeilen auf der Grundlage mehrspaltiger Werte
  5. DataFrame-Zeilen mit mehreren Bedingungen auswählen
Wie man DataFrame-Zeilen auf der Grundlage von Spaltenwerten in Pandas filtert

Wir können Zeilen von DataFrame basierend auf einzelnen oder mehreren Spaltenwerten auswählen. Wir können auch Zeilen aus DataFrame erhalten, die eine oder mehrere Bedingungen erfüllen oder nicht erfüllen. Dies kann mit Hilfe der Methoden boolean indexing, positional indexing, label indexing und query() erreicht werden.

Auswahl von Pandas-Zeilen auf der Grundlage bestimmter Spaltenwerte

Wir können Pandas-Zeilen aus einem DataFrame auswählen, der den spezifischen Wert für eine Spalte enthält oder nicht enthält. Dies ist eine weit verbreitete Methode zum Filtern des DataFrame auf der Grundlage des Spaltenwerts.

Pandas-Zeilen auswählen, die einen bestimmten Spaltenwert enthalten

Filtern mit boolescher Indizierung

Bei der booleschen Indizierung erzeugen wir zunächst eine Maske, die nur eine Reihe von booleschen Werten darstellt, die angeben, ob die Spalte das spezifische Element enthält oder nicht.

df_mask = df["col_name"] == "specific_value"

Diese Maske wenden wir dann auf unseren ursprünglichen DataFrame an, um die erforderlichen Werte zu filtern.

filtered_df = df[df_mask]

Dies gibt den gefilterten DataFrame zurück, der nur Zeilen enthält, die den spezifischen_Wert für die Spalte col_name haben.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Dies ergibt alle Zeilen im df, deren Sales 300 ist.

Filter unter Verwendung der Positionsindexierung

Sie ähnelt der booleschen Indexierung, beinhaltet aber einen zusätzlichen Schritt. Bei dieser Methode erstellen wir zuerst eine boolesche Maske und finden dann Positionen, an denen die boolesche Maske den Wert True hat. Dann übergeben wir alle Positionen mit dem Wert True in der Maske an die Methode iloc(), so dass alle gewünschten Zeilen nur ausgewählt werden.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Dies ergibt auch alle Zeilen im df, deren Sales-Wert 300 ist.

Pandas-Verkettung

Wir können die Pandas-Verkettung auch verwenden, um Pandas-DataFrame nach Spaltenwerten zu filtern. In dieser Methode verwenden wir die pandas.DataFrame.eq() Methode für die DataFrame-Spalte, deren Werte überprüft werden sollen, um die Gleichheit der Elemente im DataFrame zu vergleichen.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df[df.Sales.eq(300)]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

pandas.DataFrame.query()

Wir könnten pandas.DataFrame.query() verwenden, um Zeilen nach Spaltenwert in Pandas auszuwählen.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df.query("Sales == 300")
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Wenn wir den vorhandenen DataFrame aktualisieren möchten, können wir inplace=True in der Abfragemethode setzen.

Pandas-Zeilen auswählen, die keinen bestimmten Spaltenwert enthalten

Die Methode zur Auswahl von Pandas-Zeilen, die keinen spezifischen Spaltenwert enthalten, ist ähnlich wie bei der Auswahl von Pandas-Zeilen mit einem spezifischen Spaltenwert. Das einzige, was wir ändern müssen, ist die Bedingung, dass die Spalte keinen spezifischen Wert enthält, indem wir bei der Erstellung von Masken oder Abfragen einfach == durch != ersetzen.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Dies wählt alle Zeilen von df aus, deren Sales-Werte nicht 300 sind.

Pandas-Zeilen auswählen, deren Spaltenwerte größer oder kleiner als der spezifische Wert sind

Um Pandas Zeilen mit Spaltenwerten auszuwählen, die größer oder kleiner als ein bestimmter Wert sind, verwenden wir bei der Erstellung von Masken oder Abfragen Operatoren wie >, <=, >=.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
2  April-12    400      2
4  April-14    300      3
5  April-16    300      2

Das Ergebnis ist ein DataFrame mit Sales-Werten größer oder gleich 300.

Auswahl von Pandas-Zeilen auf der Grundlage mehrspaltiger Werte

Wir haben Methoden zur Auswahl von Zeilen eingeführt, die auf bestimmten Werten der Spalte im DataFrame basieren. In diesem Abschnitt besprechen wir Methoden zur Auswahl von Pandas-Zeilen auf der Grundlage mehrerer Spaltenwerte.

Auswahl von Pandas-Zeilen, die einen beliebigen von mehreren Spaltenwerten enthalten

Zur Auswahl von Pandas-Zeilen, die einen von mehreren Spaltenwerten enthalten, verwenden wir pandas.DataFrame.isin(values), das einen DataFrame von Booleans zurückgibt, der anzeigt, ob jedes Element im DataFrame in Werten enthalten ist oder nicht. Der so erhaltene DataFrame der Booleans kann zur Auswahl von Zeilen verwendet werden.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Es werden alle Zeilen aus dem DataFrame gefiltert, deren Sales-Wert entweder 200 oder 400 ist.

Auswahl von Pandas-Zeilen, die keinen von mehreren angegebenen Spaltenwerten enthalten

Um die Zeilen eines DataFrame auszuwählen, der keinen von mehreren angegebenen Spaltenwerten enthält, negieren wir den DataFrame von Booleans, der von pandas.DataFrame.isin(values) zurückgegeben wird, indem wir das Zeichen ~ an den Anfang setzen.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Es werden alle Zeilen aus dem DataFrame gefiltert, deren Sales-Wert weder 200 noch 400 ist.

DataFrame-Zeilen mit mehreren Bedingungen auswählen

Wenn wir Zeilen unter Berücksichtigung von Zeilenwerten mehrerer Spalten filtern wollen, machen wir mehrere Bedingungen und kombinieren sie mit &-Operatoren. Nun wird die Zeile nur dann ausgewählt, wenn sie die Bedingungen für alle Spalten erfüllt.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)

Ausgabe:

       Date  Sales  Price
3  April-13    200      4

Es werden alle Zeilen aus DataFrame gefiltert, deren Umsatz entweder 200 oder 400 ist und deren Price weder 2 noch 3 ist. Die Zeile in der Ausgabe erfüllt nur beide Bedingungen im gesamten DataFrame.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Pandas DataFrame

Verwandter Artikel - Pandas DataFrame Row