2014-11-25 1 views
12

Ich habe folgenden Datenrahmen:Pandas ersetzen Werte

 col 
0 pre 
1 post 
2 a 
3 b 
4 post 
5 pre 
6 pre 

Ich möchte alle Zeilen in dem Datenrahmen ersetzen, die nicht enthalten ‚pre‘ wird ‚nicht vorge‘, so Datenrahmen wie folgt aussieht:

 col 
0 pre 
1 nonpre 
2 nonpre 
3 nonpre 
4 nonpre 
5 pre 
6 pre 

Ich kann dies mit einem Wörterbuch und Pandas ersetzen, aber ich möchte nur die Elemente, die nicht "pre" sind und ersetzen sie durch "nonpre". Gibt es einen besseren Weg, dies zu tun, ohne alle möglichen Col-Werte in einem Wörterbuch aufzulisten?

Antwort

21

Solange Sie mit der df.loc[condition, column] Syntax vertraut sind, die Pandas können, ist dies sehr einfach, nur df['col'] != 'pre' tun alle Zeilen zu finden, die geändert werden sollen:

df['col2'] = df['col'] 
df.loc[df['col'] != 'pre', 'col2'] = 'nonpre' 

df 
Out[7]: 
    col col2 
0 pre  pre 
1 post nonpre 
2  a nonpre 
3  b nonpre 
4 post nonpre 
5 pre  pre 
6 pre  pre 
+0

Dank! Gibt es ein Problem mit der Verwendung von .loc, vor dem ich vorsichtig sein sollte? – user308827

+1

Nein, '.loc 'ist im Grunde das, was Sie zuerst versuchen sollten, wenn Sie eine bestimmte Reihe von Zeilen und Spalten in Ihrem Datenframe erhalten möchten. Nicht sicher, ob Sie Erfahrung mit R haben, aber es funktioniert sehr ähnlich wie die Subsetting-Syntax für R-Datenrahmen. – Marius

4
df[df['col'].apply(lambda x: 'pre' not in x)] = 'nonpre'