Tôi có một cột trong python pandas DataFrame có các giá trị True / false boolean, nhưng để tính toán thêm, tôi cần đại diện 1/0. Có một cách nhanh chóng gấu trúc / numpy để làm điều đó?
Tôi có một cột trong python pandas DataFrame có các giá trị True / false boolean, nhưng để tính toán thêm, tôi cần đại diện 1/0. Có một cách nhanh chóng gấu trúc / numpy để làm điều đó?
Câu trả lời:
Một cách ngắn gọn để chuyển đổi một cột giá trị boolean thành cột số nguyên 1 hoặc 0:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn. Sử dụng astype(int)sau đó sẽ thất bại. Một cách tiếp cận khác, chuyển đổi Truethành 1.0 và False0,0 (phao) trong khi bảo tồn các giá trị NaN là làm:df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)và nhận được kết quả tương tự?
Chỉ cần nhân Dataframe của bạn với 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
Truelà 1trong Python và tương tự Falselà 0* :
>>> True == 1
True
>>> False == 0
True
Bạn sẽ có thể thực hiện bất kỳ thao tác nào bạn muốn trên chúng bằng cách chỉ coi chúng như thể chúng là số, vì chúng là 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 đã có những gì bạn đang tìm kiếm.
* Lưu ý tôi sử dụng là một từ tiếng Anh, không phải từ khóa Python is- Truesẽ không phải là cùng một đối tượng như bất kỳ ngẫu nhiên nào 1.
np.sin(True).dtypelà float16 đối với tôi.
df.my_column.mean()là tốt (như bạn ngụ ý), nhưng khi tôi thử: df.groupby("some_other_column").agg({"my_column":"mean"})Tôi nhận được DataError: No numeric types to aggregate, vì vậy nó xuất hiện KHÔNG phải lúc nào cũng giống nhau. Chỉ cần FYI.
boolcác cột tốt.
TypeError: numpy boolean subtract, the toán tử -`, không được dùng nữa, sử dụng hàm bitwise_xor, ^toán tử hoặc hàm logic_xor để thay thế.
boolcác cột như đối với intcác cột
Bạn cũng có thể làm điều này trực tiếp trên Khung
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
Bạn có thể sử dụng một chuyển đổi cho khung dữ liệu của bạn:
df = pd.DataFrame(my_data condition)
df = df*1
Sử dụng Series.viewđể chuyển đổi boolean sang số nguyên:
df["somecolumn"] = df["somecolumn"].view('i1')