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 Du Spalten mit der doppelten Liste [[...]]
auswählst, erhältst Du in jedem Fall wieder einen DataFrame
zurück. Das Ergebnis der Auswahl kannst Du bei Bedarf wieder in einer Variablen abspeichern:
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 Du Daten in der ursprünglichen Tabelle änderst, 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'
Versuche die folgenden Codebeispiele nachzuvollziehen, auch wenn Du nicht alle Funktionen im Detail kennst oder verstehst.
Circulation Active Year
ist als Text und nicht als Zahl abgespeichert! Konvertiere die Spalte in ein numerisches Format. Überschreibe die ursprüngliche Variable mit den neuen Werten. Nutze 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
. Überschreibe wieder die ursprüngliche Variable mit den neuen Werten. Du kannst dieses Codesnippet nutzen:pd.to_datetime(
df['Circulation Active Month'],
errors='coerce',
format="%B"
)
df['Circulation Active Month'].dt.month
Berechne nun die aktive Mitgliedschaftsdauer in Monaten wie oben definiert und weise das Ergebnis der Spalte Membership Duration
zu.
Nimm an, dass Einträge mit fehlenden Werten bedeutet, dass die Person 0
Monate aktiv Mitglied gewesen ist. Ersetze dazu alle NaN
values in der neuen Variable mit der Zahl 0
. Nutze dieses Codesnippet (siehe auch den nachfolgenden Abschnitt Exkurs: Fehlende Werte über die Behandlung fehlender Werte):
df['Membership Duration'].fillna(0)