578 Stimmen

Erneuern Sie Werte in der Pandas-Spalte mit einem Dictionary und bewahren Sie NaNs.

Ich habe ein Wörterbuch, das so aussieht: di = {1: "A", 2: "B"}

Ich möchte es auf die col1-Spalte eines ähnlichen Dataframes anwenden:

     col1   col2
0       w      a
1       1      2
2       2    NaN

um folgendes zu erhalten:

     col1   col2
0       w      a
1       A      2
2       B    NaN

Wie kann ich das am besten machen?

1voto

louisD Punkte 175

Als Erweiterung dessen, was von Nico Coallier (für mehrere Spalten anwenden) und U10-Forward (Verwendung von anwendungsstil-Methoden) vorgeschlagen wurde, und zusammengefasst in einer Einzeiler schlage ich vor:

df.loc[:,['col1','col2']].transform(lambda x: x.map(lambda x: {1: "A", 2: "B"}.get(x,x))

Der .transform() verarbeitet jede Spalte als Serie. Im Gegensatz zu .apply(), das die Spalten in einem DataFrame zusammenfasst.

Demnach können Sie die Series Methode map() anwenden.

Zuletzt, und ich habe dieses Verhalten dank U10 entdeckt, können Sie die gesamte Serie im .get() Ausdruck verwenden. Es sei denn, ich habe sein Verhalten falsch verstanden und es verarbeitet die Serie sequentiell anstatt bitweise.
Die .get(x,x) berücksichtigt die Werte, die Sie nicht in Ihrem Zuordnungsdatensatz erwähnt haben, was sonst als NaN durch die .map() Methode betrachtet würde.

-1voto

Amir Imani Punkte 2426

Ein nativerer Ansatz von Pandas besteht darin, eine Ersetzungsfunktion wie unten gezeigt anzuwenden:

def multiple_replace(dict, text):
  # Erstellen eines regulären Ausdrucks aus den Schlüsseln des Wörterbuchs
  regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))

  # Für jedes Übereinstimmung, den entsprechenden Wert im Wörterbuch nachschlagen
  return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text) 

Nachdem Sie die Funktion definiert haben, können Sie sie auf Ihr DataFrame anwenden.

di = {1: "A", 2: "B"}
df['col1'] = df.apply(lambda row: multiple_replace(di, row['col1']), axis=1)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X