我在python pandas DataFrame中有一个列,具有布尔True/False值,但对于进一步的计算,我需要1/0表示。有没有一种快速的熊猫/numpy方法来做到这一点?


当前回答

你也可以直接在框架上这样做

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

其他回答

将布尔值的单列转换为整数1或0的列的简洁方法:

df["somecolumn"] = df["somecolumn"].astype(int)

在Python中True为1,同样False为0*:

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

你应该能够对它们执行任何你想要的操作,只要把它们当作数字来对待,因为它们就是数字:

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

所以回答你的问题,不需要工作,你已经有了你要找的东西。

*注意我使用is作为一个英语单词,而不是Python关键字is - True将不会是与任何随机1相同的对象。

你也可以直接在框架上这样做

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.replace({False: 0, True: 1}, inplace=True)

这适用于包含许多不同类型列的DataFrame,而不管有多少是布尔类型。

使用系列。转换布尔值到整数的视图:

df["somecolumn"] = df["somecolumn"].view('i1')