2013-06-29 40 views
44

Tôi có một cột trong python pandas DataFrame có boolean True/False giá trị, nhưng để tính toán thêm tôi cần 1/0 đại diện. Có một con gấu trúc/numpy cách nhanh chóng để làm điều đó?python pandas/numpy True/False để 1/0 ánh xạ

EDIT: Các câu trả lời bên dưới dường như không giữ trong trường hợp có khối u, với một mảng có cả số nguyên và giá trị True/False, trả về dtype=object trên mảng đó. Để tiến hành các phép tính tiếp theo trong một phần, tôi phải đặt rõ ràng np_values = np.array(df.values, dtype = np.float64).

+0

Cần tính toán thêm gì? –

Trả lời

22

True1 bằng Python, và tương tự như vậy False0*:

>>> True == 1 
True 
>>> False == 0 
True 

Bạn sẽ có thể thực hiện bất kỳ hoạt động mà bạn muốn trên chúng bằng cách chỉ đối xử với họ như thể chúng là con số, khi họ số:

>>> issubclass(bool, int) 
True 
>>> True * 5 
5 

Vì vậy, để trả lời câu hỏi của bạn, không có công việc cần thiết - bạn đã h ave những gì bạn đang tìm kiếm.

* Lưu ý tôi sử dụng như một từ tiếng Anh, không phải là từ khóa Python is-True sẽ không phải là đối tượng giống như bất kỳ ngẫu nhiên 1.

+0

Tuyệt vời, không biết về điều đó, cảm ơn bạn! –

+0

Chỉ cần cẩn thận với các kiểu dữ liệu nếu thực hiện phép toán dấu phẩy động: 'np.sin (True) .dtype' là float16 cho tôi. – jorgeca

+1

Tôi đã có một khung dữ liệu với một cột boolean, và tôi có thể gọi 'df.my_column.mean()' rất tốt (như bạn ngụ ý), nhưng khi tôi thử: 'df.groupby (" some_other_column "). {"my_column": "mean"}) 'Tôi nhận được' DataError: Không có kiểu số để tổng hợp', vì vậy nó xuất hiện chúng là ** NOT ** luôn giống nhau. Chỉ là FYI. – dwanderson

14

Bạn cũng có thể làm điều này trực tiếp trên Frames

In [104]: df = DataFrame(dict(A = True, B = False),index=range(3)) 

In [105]: df 
Out[105]: 
     A  B 
0 True False 
1 True False 
2 True False 

In [106]: df.dtypes 
Out[106]: 
A bool 
B bool 
dtype: object 

In [107]: df.astype(int) 
Out[107]: 
    A B 
0 1 0 
1 1 0 
2 1 0 

In [108]: df.astype(int).dtypes 
Out[108]: 
A int64 
B int64 
dtype: object 
103

Chỉ cần trả lời rất rõ ràng vấn đề làm thế nào để chuyển đổi một cột duy nhất của các giá trị boolean để một cột các số nguyên 1 hoặc 0:

df.somecolumn = df.somecolumn.astype(int)

18

Chỉ cần nhân Dataframe của bạn bằng 1 (int)

[1]: data = pd.DataFrame([[True, False, True], [False, False, True]]) 
[2]: print data 
      0  1  2 
    0 True False True 
    1 False False True 

[3]: print data*1 
     0 1 2 
    0 1 0 1 
    1 0 0 1 
Các vấn đề liên quan