Auswahl von Zeilen

Die Zeilen eines DataFrames 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]

Logische Operatoren

AusdruckBeschreibung
</ <=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)

2.6 Filtern (30 Min)

  1. Filtere den Datensatz nach Kindern unter 10 Jahren. Wie viele Einträge erhältst Du?
  2. Gibt es Personen mit mehr als 20000 Ausleihen?
  3. Wie viele Personen stammen aus dem Stadtteil (Richmond)?
  4. Wie viele Prozent der Beobachtungen haben eine Membership Duration von Null Monaten?