Die Spalten eines DataFrame
s werden über einen Spaltenindex referenziert. Üblicherweise besteht der Spaltenindex aus Spaltennamen in Textform:
import pandas as pd
df = pd.read_csv("../data/Library_Usage.csv")
df.columns
Einzelne Series
können wie bei einem Python Dictionary mit df[<name>]
extrahiert werden. Mehre Spalten mit df[[<name1>, <name2]]
. Wenn Sie Spalten mit der doppelten Liste [[...]]
auswählen erhalten Sie in jedem Fall wieder einen DataFrame
zurück. Das Ergebnis der Auswahl können Sie bei Bedarf wieder in einer Variablen abspeichern:
Versuc
x = df['Total Renewals']
df[['Total Renewals', 'Total Checkouts']]
column_names = ['Total Renewals', 'Total Checkouts'] # auxiliary variable
subset = df[column_names]
print(x)
print(subset)
Spalten können mit einer Zuweisung (=
) überschrieben oder neu erstellt werden:
df['dummy_variable'] = 5
Bei der Auswahl von Spalten und Zeilen wird keine Kopie des DataFrame
s oder der Series
erstellt, sondern nur eine Referenz auf die ursprüngliche Tabelle. Wenn Sie Daten in der ursprünglichen Tabelle ändern, so ändert sich auch die Referenz:
x = df['Total Renewals']
df['Total Renewals'] = 5
x
Berechnungen auf schon bestehenden Variablen können auch direkt einer neuen Spalte zugeordnet werden:
import numpy as np
df['is_adult'] = df['Patron Type Definition'] == 'ADULT'
df['log_renewals'] = np.log(df['Total Renewals'] + 1)
Im ersten Beispiel wurde zuerst die Anweisung df['Patron Type Definition'] == 'ADULT'
durchgeführt. Das implizite Ergebnis dieser Anweisung ist eine Series
mit booleschen Werten True
oder False
. Die neu erstellte Series
wird dann in einer neuen Spalte is_adult
dem DataFrame
angehängt.
Im zweiten Beispiel wurde der Logarithmus auf den Werten der Spalte Total Renewals
berechnet und einer neuen Spalte log_renewals
zugewiesen.
Ziel ist es, eine neue Variable Membership Duration
zu erstellen, die für jeden Kunden die aktive Mitgliedschaft in Monaten seit der Registrierung misst. Die aktive Mitgliedschaft wird definiert als:
'Membership Duration' = ('Circulation Active Year' - 'Year Patron Registered')*12 + 'Circulation Active Month'
Versuchen Sie die folgenden Codebeispiele nachzuvollziehen, auch wenn Sie nicht alle Funktionen im Detail kennen oder verstehen.
Circulation Active Year
ist als Text und nicht als Zahl abgespeichert! Konvertieren Sie die Spalte in ein numerisches Format. Überschreiben Sie die ursprüngliche Variable mit den neuen Werten. Nutzen Sie dieses Codesnippet:pd.to_numeric(
df['Circulation Active Year'], errors='coerce'
)
Die Spalte Circulation Active Month
enthält die Monatsnamen als Text. Für die Berechnung muss diese in ein numerisches Format konvertiert werden.
pd.to_datetime
. Überschreiben Sie wieder die ursprüngliche Variable mit den neuen Werten. Sie können dieses Codesnippet nutzen:pd.to_datetime(
df['Circulation Active Month'],
errors='coerce',
format="%B"
)
df['Circulation Active Month'].dt.month
Berechnen Sie nun die aktive Mitgliedschaftsdauer in Monaten wie oben definiert und weisen Sie das Ergebnis der Spalte Membership Duration
zu.
Nehmen Sie an, dass Einträge mit fehlenden Werten bedeutet, dass die Person 0
Monate aktiv Mitglied gewesen ist. Ersetzen Sie dazu alle NaN
values in der neuen Variable mit der Zahl 0
. Nutzen Sie dieses Codesnippet (siehe auch diese Lektion über die Behandlung fehlender Werte):
df['Membership Duration'].fillna(0)