2014-11-25 19 views
12

Mam następujący dataframe:Pandy zastąpić wartości

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

Chcę wymienić wszystkie wiersze w dataframe które nie zawierają „pre”, aby stać się „nonpre”, więc dataframe wygląda:

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

Mogę to zrobić, używając słownika i zastępowania pandy, ale chcę tylko wybrać elementy, które nie są "pre" i zastąpić je "bez zastrzeżeń". czy istnieje lepszy sposób na zrobienie tego bez wylistowania wszystkich możliwych wartości col w słowniku?

Odpowiedz

21

Dopóki jesteś wygodne ze składnią df.loc[condition, column] który pozwala pandy, to jest bardzo proste, wystarczy zrobić df['col'] != 'pre' znaleźć wszystkie wiersze, które powinny zostać zmienione:

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

dzięki! czy jest jakiś problem z używaniem .loc powinienem być ostrożny? – user308827

+1

Nie, '.loc' jest zasadniczo tym, co powinieneś próbować jako pierwszy, gdy chcesz uzyskać określony zestaw wierszy i kolumn w ramce danych. Nie wiem, czy masz doświadczenie z R, ale działa bardzo podobnie do składni podsekcji dla ramek danych R. – Marius

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