2014-11-25 36 views
12

Tôi có dataframe sau:Pandas thay thế giá trị

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

Tôi muốn thay thế tất cả các hàng trong dataframe mà không chứa 'trước' để trở thành 'nonpre', vì vậy dataframe trông giống như:

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

Tôi có thể làm điều này bằng cách sử dụng từ điển và gấu trúc thay thế, tuy nhiên tôi muốn chỉ chọn các yếu tố không phải là 'trước' và thay thế chúng bằng 'nonpre'. là có một cách tốt hơn để làm điều đó mà không liệt kê tất cả các giá trị col có thể có trong một từ điển?

Trả lời

21

Chừng nào bạn cảm thấy thoải mái với cú pháp df.loc[condition, column] rằng gấu trúc cho phép, điều này rất dễ dàng, chỉ cần làm df['col'] != 'pre' để tìm tất cả các hàng rằng nên thay đổi:

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

cảm ơn! là có bất kỳ vấn đề với việc sử dụng. Tôi nên cảnh giác? – user308827

+1

Không, '.loc' về cơ bản là những gì bạn nên thử trước khi bạn muốn nhận được một tập hợp các hàng và cột cụ thể trong khung dữ liệu của bạn. Không chắc chắn nếu bạn có kinh nghiệm với R, nhưng nó hoạt động rất giống với cú pháp subsetting cho R dataframes. – Marius

4
df[df['col'].apply(lambda x: 'pre' not in x)] = 'nonpre' 
Các vấn đề liên quan