我在python pandas DataFrame中有一个列具有布尔值True / False值,但是为了进一步计算,我需要1/0表示。有没有快速的熊猫/ numpy方式呢?
编辑:
下面的答案在numpy的情况下似乎不成立,给定一个包含整数和True / False值的数组,在这样的数组上返回dtype=object
。为了在numpy中继续进行进一步计算,我必须明确设置np_values = np.array(df.values, dtype = np.float64)
。
答案 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)
True
为1
,同样False
为0
* :
>>> 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)
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