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 True
thành 1.0 và False
0,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
True
là 1
trong Python và tương tự False
là 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
- True
sẽ 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).dtype
là 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.
bool
cá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ế.
bool
các cột như đối với int
cá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')