2016-12-01 11 views
9

Tôi đọc tệp csv thành một khung dữ liệu gấu trúc và muốn chuyển đổi các cột có câu trả lời nhị phân từ chuỗi có/không thành số nguyên 1/0. Dưới đây, tôi hiển thị một trong các cột như vậy ("sampleDF" là khung dữ liệu gấu trúc).Có cách nào đơn giản để thay đổi cột có/không thành 1/0 trong một khung dữ liệu Pandas không?

In [13]: sampleDF.housing[0:10] 
Out[13]: 
0  no 
1  no 
2 yes 
3  no 
4  no 
5  no 
6  no 
7  no 
8 yes 
9 yes 
Name: housing, dtype: object 

Trợ giúp được đánh giá cao!

+7

'sampleDF.housing.replace (('có', 'không'), (1, 0), inplace = True) ' – AChampion

+0

Điều đó không công việc, cảm ơn! – Mushu909

Trả lời

3
# produces True/False 
sampleDF['housing'] = sampleDF['housing'] == 'yes' 

Giá trị trả về ở trên Giá trị đúng/sai tương ứng là 1/0. Booleans hỗ trợ chức năng tổng hợp, vv Nếu bạn thực sự cần nó để được 1/0 giá trị, bạn có thể sử dụng sau đây.

housing_map = {'yes': 1, 'no': 0} 
sampleDF['housing'] = sampleDF['housing'].map(housing_map) 
4

Hãy thử điều này:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0}) 
15

phương pháp 1

sample.housing.eq('yes').mul(1) 

phương pháp 2

pd.Series(np.where(sample.housing.values == 'yes', 1, 0), 
      sample.index) 

phương pháp 3

sample.housing.map(dict(yes=1, no=0)) 

phương pháp 4

pd.Series(map(lambda x: dict(yes=1, no=0)[x], 
       sample.housing.values.tolist()), sample.index) 

phương pháp 5

pd.Series(np.searchsorted(['no', 'yes'], sample.housing.values), sample.index) 

Tất cả mang lại

0 0 
1 0 
2 1 
3 0 
4 0 
5 0 
6 0 
7 0 
8 1 
9 1 

thời gian
mẫu cho

enter image description here

thời gian
dài mẫu
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

+0

Đây là một câu trả lời sâu sắc tuyệt vời. Tôi thậm chí sẽ không nghĩ đến một số trong số này. –

+0

Tôi đang chúc bạn một Giáng sinh vui vẻ! Món quà nhỏ (3) và nếu một cái gì đó sai nên xin lỗi! Sự hiểu lầm cuối cùng là không tốt đẹp, nhưng thực sự tôi không làm điều gì đó sai, có lẽ tôi có thể viết bình luận giải thích sớm ... Vì vậy, may mắn và cảm ơn bạn đã giúp đỡ tất cả! – jezrael

+0

Giáng sinh vui vẻ! Dù vấn đề không thay đổi thực tế là tôi muốn bạn và gia đình của bạn là tốt nhất (-: – piRSquared

0
%timeit 
sampleDF['housing'] = sampleDF['housing'].apply(lambda x: 0 if x=='no' else 1) 

1,84 ms ± 56,2 ms mỗi vòng lặp (trung bình ± std. dev.7 chạy, 1000 vòng mỗi)

Thay thế 'có' với 1, 'không' với 0 cho cột df quy định.

Các vấn đề liên quan