2017-11-21 1 views
1

Ich verstehe, eine Zeichenfolge in einer Spalte ersetzen würde einfach sein:python to_replace String nicht gleich einem Wert?

df['surf'].replace(to_replace='Grass', value='Turf') 

Dies ersetzt alle Werte von ‚Grass‘ mit ‚Turf‘ in meiner Kolumne. Aber ich will das Gegenteil davon. Ich habe versucht, mit! = Oder ~ aufzuschauen, aber ich habe das nicht zur Arbeit gebracht.

Was passiert, wenn ich möchte, dass alle Werte NICHT ‚Grass‘ mit ‚Turf‘ ersetzt werden

Edit: Ich sollte hinzufügen, kann ich es tun mit:

df.loc[df['surf'] != 'Grass', 'surf'] = 'Turf' 

aber frage mich, ob es ein Weg, mit dem .replace

+2

Nach [der Dokumentation] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html), to_replace kann eine Regex sein. – glibdud

Antwort

2

wurde können Sie eine negative Vorschau und Regex-Modus verwenden, um zu tun, was Sie wollen:

df['surf'] = df['surf'].replace(to_replace=r"^(.(?<!Grass))*?$", value='Turf',regex=True) 

(passend alles, aber das Wort Trick nahm von How to negate specific word in regex?)


, Alternativ str.replace verwenden, der regex-basierten Austausch von Standard führt:

df['surf'] = df['surf'].str.replace(r"^(.(?<!Grass))*?$", "Turf") 
+0

@COLDSPEED danke, ausgezeichnete Bearbeitung. Wäre es nicht möglich, 'inplace = True 'zu setzen, sei besser, als' df [' surf '] '' zuzuweisen? (Nicht der Pandas-Experte, sag es mir). Außerdem wird hier kein roher Präfix benötigt, es gibt keine umgekehrten Schrägstriche in der Regex. –

+0

Kein Problem. Das Setzen von 'inplace = True' funktioniert auch, wenn es sich um den gesamten Datenrahmen handelt. Wenn Sie Spalten aufteilen, werden die Dinge zweifelhaft (je nachdem, ob das Slicing eine Ansicht oder eine Kopie zurückgibt, bin ich mir nicht sicher, welche genau das passiert, aber Sie bekommen den Punkt). Also, es ist besser, nur sicher zu spielen und zurück zuweisen. Ich sollte hier erwähnen, dass "inplace = True", selbst wenn es funktioniert, keine Leistungssteigerungen bietet. Eine Kopie wird immer noch erstellt, aber dem Original zugewiesen, sodass Sie die Neuzuweisung nicht explizit angeben müssen. Ein praktisches Feature. –

+0

(Psst, ich habe Ihren Ping nicht bekommen, Sie müssen @ Cᴏʟᴅsᴘᴇᴇᴅ verwenden: p) –

Verwandte Themen