Wie man DataFrame-Zeilen auf der Grundlage von Spaltenwerten in Pandas filtert
- Auswahl von Pandas-Zeilen auf der Grundlage bestimmter Spaltenwerte
- Pandas-Zeilen auswählen, die keinen bestimmten Spaltenwert enthalten
- Pandas-Zeilen auswählen, deren Spaltenwerte größer oder kleiner als der spezifische Wert sind
- Auswahl von Pandas-Zeilen auf der Grundlage mehrspaltiger Werte
- DataFrame-Zeilen mit mehreren Bedingungen auswählen
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 is a backend software engineer at Matrice.ai.
LinkedInVerwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum
Verwandter Artikel - Pandas DataFrame Row
- So erhalten Sie die Zeilenanzahl eines Pandas DataFrame
- Zufälliges Mischen von DataFrame-Zeilen in Pandas
- Wie man durch Zeilen eines DataFrame in Pandas iteriert
- Wie erhält man einen Index aller Reihen, deren bestimmte Spalte den gegebenen Zustand in Pandas befriedigt
- Finden Sie doppelte Zeilen in einem DataFrame mit Pandas