Pandas DataFrame.where(): Bedingungen in DataFrames prüfen
Die Python-Pandas-DataFrame.where()-Funktion wird für bedingte Datenmanipulationen in DataFrames eingesetzt. Sie erlaubt es Nutzer:innen, Werte in einem Pandas DataFrame auf Basis spezifischer Kriterien auszutauschen oder zu maskieren.
Syntax von Pandas DataFrame.where()
Die where()-Funktion verarbeitet bis zu fünf Parameter und nutzt die folgende Basis-Syntax:
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)pythonDabei wird die Funktion auf einen DataFrame angewendet. Nur jene Werte, welche die Bedingung (cond) erfüllen, bleiben gleich. Alle übrigen Daten werden durch die in other definierten Werte ersetzt.
Relevante Parameter
Pandas DataFrame.where() bietet verschiedene Parameter für eine präzise Steuerung der Datenbearbeitung:
| Parameter | Beschreibung | Standardwert |
|---|---|---|
cond
|
Voraussetzung, damit Werte im DataFrame erhalten bleiben | |
other
|
Ersatzwert für Daten, welche die Bedingung nicht erfüllen | |
inplace
|
Bei True erfolgt die Änderung direkt im bestehenden DataFrame
|
False
|
axis
|
Legt fest, ob die Bedingung auf Zeilen (axis=0) oder Spalten (axis=1) wirkt
|
None
|
level
|
Bestimmt die Ebene des Multiindex für die Anwendung der Bedingung | None
|
Anwendung von Pandas DataFrame.where()
Die where()-Funktion hilft in vielen Szenarien der Datenaufbereitung. Dazu gehören etwa die Bereinigung von Datensätzen oder das Erstellen neuer Spalten nach logischen Regeln.
Werte bedingt ersetzen
Stell dir vor, du hast einen DataFrame mit Verkaufszahlen und möchtest nur positive Ergebnisse behalten. Alle negativen Beträge sollen durch 0 ersetzt werden. Mit Pandas DataFrame.where() klappt das reibungslos. Zuerst erstellen wir den DataFrame:
import pandas as pd
# Beispiel-DataFrame erstellen
data = {
'Region': ['Nord', 'Süd', 'Ost', 'West'],
'Verkäufe_Q1': [15000, -5000, 3000, -1000],
'Verkäufe_Q2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)pythonDieser Code erzeugt folgenden DataFrame:
Region Verkäufe_Q1 Verkäufe_Q2
0 Nord 15000 20000
1 Süd -5000 25000
2 Ost 3000 -7000
3 West -1000 5000Durch where() ersetzt du negative Werte durch 0. Achte darauf, nur numerische Spalten auszuwählen, damit der mathematische Vergleich korrekt ausgeführt wird.
# Bedingtes Ersetzen von Werten
df_positive = df.copy()
df_positive[['Verkäufe_Q1', 'Verkäufe_Q2']] = df[['Verkäufe_Q1', 'Verkäufe_Q2']].where(df[['Verkäufe_Q1', 'Verkäufe_Q2']] > 0, 0)
print(df_positive)pythonDer neue DataFrame df_positive zeigt nun nur noch positive Zahlen und nutzt für alles andere wie gewünscht 0:
Region Verkäufe_Q1 Verkäufe_Q2
0 Nord 15000 20000
1 Süd 0 25000
2 Ost 3000 0
3 West 0 5000Werte bedingt maskieren
Pandas DataFrame.where() eignet sich auch zur Maskierung, um nur relevante Teile eines DataFrames hervorzuheben. Hier sollen nur Werte über einem Schwellenwert (etwa 10000) sichtbar bleiben. Auch hier fokussieren wir uns auf die Zahlenspalten:
# Nur Werte anzeigen, die über 10000 liegen
df_masked = df.copy()
df_masked[['Verkäufe_Q1', 'Verkäufe_Q2']] = df[['Verkäufe_Q1', 'Verkäufe_Q2']].where(df[['Verkäufe_Q1', 'Verkäufe_Q2']] > 10000)
print(df_masked)pythonDas Ergebnis df_masked zeigt nur Werte größer als 10000. Alle Werte darunter erscheinen als NaN:
Region Verkäufe_Q1 Verkäufe_Q2
0 Nord 15000.0 20000.0
1 Süd NaN 25000.0
2 Ost NaN NaN
3 West NaN NaN