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 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 DataFrames 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.

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'

Versuchen Sie die folgenden Codebeispiele nachzuvollziehen, auch wenn Sie nicht alle Funktionen im Detail kennen oder verstehen.

  1. Die Spalte 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'
)
  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. Ü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"
    )
    
    • Jetzt extrahieren wir den Monat als Zahl aus der Spalte:
    df['Circulation Active Month'].dt.month
    
  2. Berechnen Sie nun die aktive Mitgliedschaftsdauer in Monaten wie oben definiert und weisen Sie das Ergebnis der Spalte Membership Duration zu.

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