
In diesem Artikel wird beschrieben, wie SIE Zeilen von Pandas. DataFrame anhand mehrerer Bedingungen auswählen.
- Grundlegende Methode zum Auswählen von Zeilen von pandas.DataFrame
- Wählen Sie Zeilen mit mehreren Bedingungen aus
- Die Operatorpriorität
Zwei Punkte sind zu beachten:
- Verwenden Sie &、|、~ (nicht und, oder, nicht)
- Schließen Sie jeden bedingten Ausdruck in Klammern ein, wenn Sie Vergleichsoperatoren verwenden
Fehler bei Verwendung von and, or, not:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Fehler wenn keine Klammern:
TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]
Im Beispielcode WIRD sterben folgende CSV-Datei gelesen und verwendet.
import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Der Beispielcode used pandas.DataFrame, aber dasselbe gilt für pandas.Series.
Grundlegende Methode zum Auswählen von Zeilen von pandas.DataFrame
Mit Einer Liste, Einem Array oder pandas.Series of boolean bool can SIE Zeilen auswählen, sterben True Sind.
mask = [True, False, True, False, True, False]
df_mask = df[mask]
print(df_mask)
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
Wählen Sie Zeilen mit mehreren Bedingungen aus
Sie können pandas.Series of bool erhalten, was ein UND von zwei Bedingungen ist, indem Sie & verwenden.
Beachten Sie, dass == und ~ hier zur Erklärung als zweite Bedingung used Werden, aber SIE can Auch != verwenden.
print(df['age'] < 35)
# 0 True
# 1 False
# 2 True
# 3 False
# 4 True
# 5 True
# Name: age, dtype: bool
print(~(df['state'] == 'NY'))
# 0 False
# 1 True
# 2 True
# 3 True
# 4 True
# 5 False
# Name: state, dtype: bool
print((df['age'] < 35) & ~(df['state'] == 'NY'))
# 0 False
# 1 False
# 2 True
# 3 False
# 4 True
# 5 False
# dtype: bool
Verwenden Sie dies, um nur True-Zeilen auszuwählen.
df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')]
print(df_and)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
Verwenden Sie Sie | für ODER.
print((df['age'] < 20) | (df['point'] > 90))
# 0 False
# 1 True
# 2 True
# 3 False
# 4 False
# 5 False
# dtype: bool
df_or = df[(df['age'] < 20) | (df['point'] > 90)]
print(df_or)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
Im following Artikel erfahren SIE, warum SIE &, |, ~ anstelle von and, or, not verwenden müssen und warum Klammern erforderlich sind.
Die Operatorpriorität
Die Rangfolge der Operatoren in Python ist ~ > & > |.
Bei drei oder mehr Bedingungen können die Ergebnisse je nach Reihenfolge variieren.
df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)]
print(df_multi_1)
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')]
print(df_multi_2)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Es ist sicherer, sie in Klammern einzuschließen.
df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)]
print(df_multi_3)
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 5 Frank 30 NY 57