Die Zeilen eines DataFrame
s können über drei verschiedene Arten ausgewählt werden. Das System kann am Anfang etwas verwirrend sein. Wir betrachten hier nur den wichtigsten Fall der Zeilenauswahl: Die Auswahl über logische Ausdrücke mittels loc[]
:
import pandas as pd
df = pd.read_csv("../data/Library_Usage.csv")
df.loc[df['Total Checkouts'] > 10000]
Der Ausdruck df['Total Checkouts'] > 10000
wird zuerst ausgewertet und ergibt eine boolesche Series
mit Einträgen True
wenn die Beobachtung mehr als 1000
Ausleihen getätigt hat und False
sonst.
Mit einer booleschen Series
lassen sich dann die Zeilen des DataFrame
auswählen: Es werden genau die Zeilen zurückgegeben, bei denen die Series
True
Werte enthält.
Anstatt alles in einer Zeile zu schreiben, können wir auch eine Hilfsvariable erstellen, die den booleschen Vektor zwischenspeichert:
row_filter = df['Total Checkouts'] > 10000
df.loc[row_filter]
Für den booleschen Zeilenfilter können komplexe logische Ausdrücke unter Zuhilfenahme der Operatoren <, >, &, |, ==
u.s.w. gebildet werden. Welche Zeilen werden hier gefiltert?
row_filter = (df['Patron Type Definition'] == 'SENIOR') & (df['Notice Preference Definition'] == 'email')
df.loc[row_filter]
Ausdruck | Beschreibung |
---|---|
< / <= | kleiner/ kleiner gleich |
> / >= | größer/ größer gleich |
== | gleich |
!= | ungleich |
& | elementweises logisches und (True und True ergeben True , sonst False ) |
| | elementweises logisches oder (False und False ergeben False , sonst True ) |
~ | elementweise logische negation (True ergibt False und umgekehrt) |
Nützlich ist auch die Funktion Series.between(left, right)
, mit der eine boolesche Series
erstellt wird, die True
ist wenn der Wert der ursprünglichen Series
zwischen oder auf den Werten left
und right
liegt. Im folgenden Beispiel wird gezeigt, dass die beiden Filter das gleiche Ergebnis liefern:
filter1 = (df['Total Checkouts'] >= 20) & (df['Total Checkouts'] <= 80)
filter2 = df['Total Checkouts'].between(20, 80)
all(filter1 == filter2)
20000
Ausleihen?Membership Duration
von Null Monaten?