Ihre Frage ist etwas mehrdeutig. Es gibt mindestens drei zwei Interpretationen:
- Die Tasten in
di
beziehen sich auf Indexwerte
- Die Tasten
di
beziehen sich auf df['col1']
Werte
- Die Tasten in
di
beziehen sich auf Indexpositionen (nicht die Frage des OP, sondern zum Spaß.).
Nachfolgend finden Sie eine Lösung für jeden Fall.
Fall 1:
Wenn sich die Schlüssel von di
auf Indexwerte beziehen sollen, können Sie die folgende update
Methode verwenden:
df['col1'].update(pd.Series(di))
Zum Beispiel,
import pandas as pd
import numpy as np
df = pd.DataFrame({'col1':['w', 10, 20],
'col2': ['a', 30, np.nan]},
index=[1,2,0])
# col1 col2
# 1 w a
# 2 10 30
# 0 20 NaN
di = {0: "A", 2: "B"}
# The value at the 0-index is mapped to 'A', the value at the 2-index is mapped to 'B'
df['col1'].update(pd.Series(di))
print(df)
ergibt
col1 col2
1 w a
2 B 30
0 A NaN
Ich habe die Werte aus Ihrem ursprünglichen Beitrag geändert, damit klarer wird, was zu update
tun ist. Beachten Sie, wie die Schlüssel in di
mit Indexwerten verknüpft sind. Die Reihenfolge der Indexwerte - , die der Index Standorte - spielt keine Rolle.
Fall 2:
Wenn sich die Schlüssel in di
auf df['col1']
Werte beziehen, zeigen @DanAllan und @DSM, wie dies erreicht werden kann mit replace
:
import pandas as pd
import numpy as np
df = pd.DataFrame({'col1':['w', 10, 20],
'col2': ['a', 30, np.nan]},
index=[1,2,0])
print(df)
# col1 col2
# 1 w a
# 2 10 30
# 0 20 NaN
di = {10: "A", 20: "B"}
# The values 10 and 20 are replaced by 'A' and 'B'
df['col1'].replace(di, inplace=True)
print(df)
ergibt
col1 col2
1 w a
2 A 30
0 B NaN
Beachten Sie, wie in diesem Fall die Schlüssel di
geändert wurden, um den Werten in zu entsprechen df['col1']
.
Fall 3:
Wenn sich die Schlüssel in di
auf Indexpositionen beziehen, können Sie sie verwenden
df['col1'].put(di.keys(), di.values())
schon seit
df = pd.DataFrame({'col1':['w', 10, 20],
'col2': ['a', 30, np.nan]},
index=[1,2,0])
di = {0: "A", 2: "B"}
# The values at the 0 and 2 index locations are replaced by 'A' and 'B'
df['col1'].put(di.keys(), di.values())
print(df)
ergibt
col1 col2
1 A a
2 10 30
0 B NaN
Hier ist die erste und dritte Reihe wurde geändert, da die in Tasten di
sind 0
und 2
, die mit Python 0-basierter Indizierung an die ersten und dritte Stelle verweisen.
col```` is tuple. The error info is
die Typen 'ndarray (dtype = object)' und 'tuple'``` nicht verglichen werden können