Pandas DataFrame.where(): Bedingungen in DataFrames prüfen
Die Python-Pandas-DataFrame.where()
-Funktion dient dazu, bedingte Datenmanipulationen in DataFrames durchzuführen. Sie ermöglicht es Programmiererinnen und Programmierern, Werte in einem Pandas DataFrame basierend auf einer bestimmten Bedingung zu ersetzen oder zu maskieren.
- Flexibel: Hosting, das jedem Website-Traffic standhält
- Verlässlich: Inklusive 24/7-Support und persönlicher Beratung
- Sicher: Kostenloses SSL-Zertifikat, DDoS-Schutz und Backups
Syntax von Pandas DataFrame.where()
Die where()
-Funktion nimmt bis zu fünf Parameter entgegen und folgt der unten gezeigten grundlegenden Syntax:
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
pythonHierbei wird die Funktion auf einen DataFrame angewendet, und nur die Werte, die die angegebene Bedingung (cond
) erfüllen, bleiben unverändert. Alle anderen Werte werden durch die in other
festgelegten Werte ersetzt.
Relevante Parameter
Pandas DataFrame.where()
nimmt verschiedene Parameter entgegen, die eine flexible Anpassung der Datenmanipulation ermöglichen:
Parameter | Beschreibung | Default-Wert |
---|---|---|
cond
|
Bedingung, die erfüllt sein muss, damit die Werte im DataFrame beibehalten werden | |
other
|
Wert, durch den die Werte ersetzt werden, die die Bedingung nicht erfüllen | |
inplace
|
Wenn True , wird die Operation direkt auf dem bestehenden DataFrame durchgeführt
|
False
|
axis
|
Gibt an, entlang welcher Achse die Bedingung angewendet wird (axis=0 /Zeilen oder axis=1 /Spalten)
|
None
|
level
|
Legt fest, auf welche Ebene des Multiindex die Bedingung angewendet werden soll | None
|
Anwendung von Pandas DataFrame.where()
Die where()
-Funktion kann in einer Vielzahl von Situationen eingesetzt werden, in denen bedingte Datenmanipulationen erforderlich sind. Hierunter fällt zum Beispiel die Datenbereinigung oder das Erstellen neuer Spalten basierend auf Bedingungen.
Bedingtes Ersetzen von Werten
Angenommen, Sie haben einen DataFrame mit den Verkaufsergebnissen eines Unternehmens und möchten nur die positiven Ergebnisse anzeigen. Alle negativen Ergebnisse sollen durch 0
ersetzt werden. Dies lässt sich mit Pandas DataFrame.where()
erreichen. Zunächst wird dafür ein DataFrame erstellt:
import pandas as pd
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)
pythonDer obige Code liefert 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 5000
Mit einem Aufruf von where()
können Sie nun alle negativen Werte durch 0
ersetzen. Hierzu müssen Sie allerdings sicherstellen, dass nur die Spalten betrachtet werden, die numerische Werte enthalten, da ansonsten der Vergleich nicht funktioniert.
# 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 resultierende DataFrame df_positive
enthält nur die positiven Verkaufsergebnisse und ersetzt alle negativen Werte wie gewünscht durch 0
:
Region Verkäufe_Q1 Verkäufe_Q2
0 Nord 15000 20000
1 Süd 0 25000
2 Ost 3000 0
3 West 0 5000
Bedingtes Maskieren von Werten
Pandas DataFrame.where()
kann auch verwendet werden, um Werte zu maskieren, d. h. nur bestimmte Teile eines DataFrames sichtbar zu machen. Im Folgenden soll der DataFrame nur die Werte anzeigen, die über einem bestimmten Schwellenwert (in diesem Falle 10000
) liegen. Auch hier müssen Sie wieder dafür Sorge tragen, dass nur numerische Spalten betrachtet werden:
# 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)
pythonIn diesem Fall zeigt der resultierende DataFrame df_masked
nur die Werte an, die größer als 10000
sind. Alle anderen Werte werden als NaN
dargestellt:
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