2016-10-16 10 views
4

Ich möchte Werte in einem Pandas Series mit einem Wörterbuch ersetzen. Ich folge @ DSM accepted answer wie so:Ersetzen Sie Werte in Pandas Series mit Wörterbuch

s = Series(['abc', 'abe', 'abg']) 
d = {'b': 'B'} 
s.replace(d) 

Das hat aber keine Auswirkungen:

0 abc 
1 abe 
2 abg 
dtype: object 

Die documentation erklären das gewünschte Format des dict für DataFrames (dh verschachtelten dicts mit Top-Level-Tasten entsprechen zu Spaltennamen), aber ich kann nichts Spezifisches für Series sehen.

+3

müssen Sie das Ergebnis zurückgeben oder übergeben param 'inplace = True' zB 's = s.replace (d)' oder 's.replace (d, inplace = True)', geben praktisch alle pandas ops eine Kopie zurück, so dass Sie entweder zurück zuweisen oder übergeben 'inplace = True' wo unterstützt – EdChum

+0

Versuchen Sie dies : 's.replace (d, Regex = True)' – MaxU

+0

@EdChum, 's.replace (d, inplace = True)' - tut nicht gewünschten Ersatz - testen Sie es ... – MaxU

Antwort

4

Sie können es regex=True Parameter tun mit:

In [37]: s.replace(d, regex=True) 
Out[37]: 
0 aBc 
1 aBe 
2 aBg 
dtype: object 

Wie Sie bereits found out yourself haben - es ist ein RegEx Ersatz und es wird nicht funktionieren wie erwartet:

In [36]: s.replace(d) 
Out[36]: 
0 abc 
1 abe 
2 abg 
dtype: object 

diese arbeitet als erwartet:

In [38]: s.replace({'abc':'ABC'}) 
Out[38]: 
0 ABC 
1 abe 
2 abg 
dtype: object 
+1

Weil es dann annimmt, dass Sie den * Wert * '" b "' durch "B" ersetzen wollen, aber der Wert "b" ist nicht in der Serie. Allerdings ist "b" in den Strings enthalten, aus denen die Werte bestehen ... –

+0

@ juanpa.arrivillaga, yep, danke! Das habe ich bereits erkannt. :) – MaxU

Verwandte Themen