Auswahl und Erstellung von Spalten

Die Spalten eines DataFrames 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 DataFrames 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.

2.5 Fallstudie: Feature Engineering (30 Min)

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.

  1. Die Spalte 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'
)
  1. Die Spalte Circulation Active Month enthält die Monatsnamen als Text. Für die Berechnung muss diese in ein numerisches Format konvertiert werden.

    • Zuerst konvertieren wir die Spalte in ein Datumsformat. Das geht mit der Funktion 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"
    )
    
    • Jetzt extrahieren wir den Monat als Zahl aus der Spalte:
    df['Circulation Active Month'].dt.month
    
  2. Berechne nun die aktive Mitgliedschaftsdauer in Monaten wie oben definiert und weise das Ergebnis der Spalte Membership Duration zu.

  3. 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)