Die Python-Pandas-DataFrame.where()-Funktion dient dazu, bedingte Da­ten­ma­ni­pu­la­tio­nen in Da­ta­Frames durch­zu­füh­ren. Sie er­mög­licht es Pro­gram­mie­re­rin­nen und Pro­gram­mie­rern, Werte in einem Pandas DataFrame basierend auf einer be­stimm­ten Bedingung zu ersetzen oder zu maskieren.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Syntax von Pandas DataFrame.where()

Die where()-Funktion nimmt bis zu fünf Parameter entgegen und folgt der unten gezeigten grund­le­gen­den Syntax:

DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
python

Hierbei wird die Funktion auf einen DataFrame an­ge­wen­det, und nur die Werte, die die an­ge­ge­be­ne Bedingung (cond) erfüllen, bleiben un­ver­än­dert. Alle anderen Werte werden durch die in other fest­ge­leg­ten Werte ersetzt.

Relevante Parameter

Pandas DataFrame.where() nimmt ver­schie­de­ne Parameter entgegen, die eine flexible Anpassung der Da­ten­ma­ni­pu­la­ti­on er­mög­li­chen:

Parameter Be­schrei­bung Default-Wert
cond Bedingung, die erfüllt sein muss, damit die Werte im DataFrame bei­be­hal­ten werden
other Wert, durch den die Werte ersetzt werden, die die Bedingung nicht erfüllen
inplace Wenn True, wird die Operation direkt auf dem be­stehen­den DataFrame durch­ge­führt False
axis Gibt an, entlang welcher Achse die Bedingung an­ge­wen­det wird (axis=0/Zeilen oder axis=1/Spalten) None
level Legt fest, auf welche Ebene des Mul­ti­in­dex die Bedingung an­ge­wen­det werden soll None

Anwendung von Pandas DataFrame.where()

Die where()-Funktion kann in einer Vielzahl von Si­tua­tio­nen ein­ge­setzt werden, in denen bedingte Da­ten­ma­ni­pu­la­tio­nen er­for­der­lich sind. Hierunter fällt zum Beispiel die Da­ten­be­rei­ni­gung oder das Erstellen neuer Spalten basierend auf Be­din­gun­gen.

Bedingtes Ersetzen von Werten

An­ge­nom­men, Sie haben einen DataFrame mit den Ver­kaufs­er­geb­nis­sen eines Un­ter­neh­mens und möchten nur die positiven Er­geb­nis­se anzeigen. Alle negativen Er­geb­nis­se 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
# 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)
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 al­ler­dings si­cher­stel­len, dass nur die Spalten be­trach­tet werden, die nu­me­ri­sche Werte enthalten, da ansonsten der Vergleich nicht funk­tio­niert.

# 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 re­sul­tie­ren­de DataFrame df_positive enthält nur die positiven Ver­kaufs­er­geb­nis­se 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 Da­ta­Frames sichtbar zu machen. Im Folgenden soll der DataFrame nur die Werte anzeigen, die über einem be­stimm­ten Schwel­len­wert (in diesem Falle 10000) liegen. Auch hier müssen Sie wieder dafür Sorge tragen, dass nur nu­me­ri­sche Spalten be­trach­tet 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 re­sul­tie­ren­de DataFrame df_masked nur die Werte an, die größer als 10000 sind. Alle anderen Werte werden als NaN dar­ge­stellt:

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
Zum Hauptmenü