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.

Webhosting
Top-Hosting für Ihre Website
  • 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)
python

Hierbei 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)
python

Der 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)
python

Der 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)
python

In 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
War dieser Artikel hilfreich?
Page top