如何在Pandas DataFrame中将True / False映射到1/0?

时间:2013-06-29 17:53:19

标签: python numpy pandas

我在python pandas DataFrame中有一个列具有布尔值True / False值,但是为了进一步计算,我需要1/0表示。有没有快速的熊猫/ numpy方式呢?

编辑: 下面的答案在numpy的情况下似乎不成立,给定一个包含整数和True / False值的数组,在这样的数组上返回dtype=object。为了在numpy中继续进行进一步计算,我必须明确设置np_values = np.array(df.values, dtype = np.float64)

8 个答案:

答案 0 :(得分:174)

只是非常明确地回答如何将单列布尔值转换为整数1或0的列的问题:

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

答案 1 :(得分:49)

将您的Dataframe乘以1(整数)

[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

答案 2 :(得分:43)

Python中{p> True1,同样False0 *

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

您应该能够通过将它们视为数字来执行您想要的任何操作,因为它们数字:

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

所以回答你的问题,没有必要的工作 - 你已经拥有了你想要的东西。

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

答案 3 :(得分:19)

您也可以直接在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

答案 4 :(得分:5)

这个问题特别提到了一个列,所以目前接受的答案是有效的。但是,它不能推广到多列。对于那些对通用解决方案感兴趣的人,请使用以下内容:

df.replace({False: 0, True: 1}, inplace=True)

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

答案 5 :(得分:1)

使用Series.view将布尔值转换为整数:

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

答案 6 :(得分:0)

您可以对数据框进行转换:

df = pd.DataFrame(my_data condition)

在1/0中将True / False转换为

df = df*1

答案 7 :(得分:-1)

我不得不将FAKE / REAL映射到0/1,但是找不到正确的答案。

请在下面找到如何将值为FAKE / REAL的列名'type'映射到0/1
(注意:类似的名称可以应用于任何列名和值)

df.loc[df['type'] == 'FAKE', 'type'] = 0
df.loc[df['type'] == 'REAL', 'type'] = 1