Answers:
一种将布尔值的单列转换为整数1或0的列的简洁方法:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
。使用astype(int)
将失败。另一种方法是在保留NaN值的同时转换True
为1.0和False
0.0(浮点数):df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
并获得相同的结果吗?
只需将您的数据框乘以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
是1
在Python,同样False
是0
*:
>>> True == 1
True
>>> False == 0
True
通过将它们视为数字,就可以对它们执行所需的任何操作,因为它们是数字:
>>> issubclass(bool, int)
True
>>> True * 5
5
因此,回答您的问题,无需任何工作-您已经有了所需的东西。
*请注意,我使用的是英文单词,而不是Python关键字is
- True
与任何random都不是同一对象1
。
np.sin(True).dtype
对我来说是float16。
df.my_column.mean()
很好地调用(如您所暗示的),但是当我尝试时:df.groupby("some_other_column").agg({"my_column":"mean"})
I get DataError: No numeric types to aggregate
,所以看起来它们并不总是相同。仅供参考。
bool
列。
TypeError: numpy boolean subtract, the
-`运算符,已弃用,改用bitwise_xor,^
运算符或logical_xor函数。使用@User 的答案可解决此问题。
bool
列不起作用,对int
列不起作用
您也可以直接在框架上执行此操作
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
您可以对数据框使用转换:
df = pd.DataFrame(my_data condition)
df = df*1
使用Series.view
的转换布尔为整数:
df["somecolumn"] = df["somecolumn"].view('i1')