Ersetzen von DataFrame-Werten mithilfe bedingter Logik
In Pandas ist die DataFrame-Manipulation ein entscheidender Aspekt. Eine häufige Operation ist das Ersetzen von Werten basierend auf bestimmten Bedingungen. Stellen Sie sich das folgende Szenario vor:
Frage:
Ich möchte Werte in einer DataFrame-Spalte, die einen Schwellenwert überschreiten, durch Null ersetzen. Ich habe versucht, dies zu erreichen mit:
df[df.my_channel > 20000].my_channel = 0
Es scheint jedoch nur zu funktionieren, wenn der Kanal in einen neuen DataFrame kopiert wird. Warum funktioniert es nicht mit dem ursprünglichen DataFrame?
Antwort:
Das Problem hängt mit dem verwendeten Indexer zusammen. Vor Pandas-Version 0.20.0 wurde häufig der .ix-Indexer verwendet. Allerdings ist es inzwischen veraltet. Verwenden Sie stattdessen die .loc- oder .iloc-Indexer.
Um Ihr Problem zu lösen, können Sie den folgenden Code verwenden:
mask = df.my_channel > 20000 column_name = 'my_channel' df.loc[mask, column_name] = 0
Dieser Code führt die folgenden Aktionen aus:
Alternativ können Sie einen Einzeiler verwenden:
df.loc[df.my_channel > 20000, 'my_channel'] = 0
Beachten Sie, dass in diesem Fall die Verwendung von .loc anstelle von .iloc empfohlen wird, da letzteres zu Problemen führen kann ein NotImplementedError.
Das obige ist der detaillierte Inhalt vonWarum funktioniert das direkte Ersetzen von DataFrame-Werten basierend auf einer Bedingung nicht und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!