我在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')
推荐文章
- 有没有办法在python中做HTTP PUT
- “foo Is None”和“foo == None”之间有什么区别吗?
- 类没有对象成员
- Django模型“没有显式声明app_label”
- 熊猫能自动从CSV文件中读取日期吗?
- 在python中zip的逆函数是什么?
- 有效的方法应用多个过滤器的熊猫数据框架或系列
- 如何检索插入id后插入行在SQLite使用Python?
- 我如何在Django中添加一个CharField占位符?
- 如何在Python中获取当前执行文件的路径?
- 我如何得到“id”后插入到MySQL数据库与Python?
- super()失败,错误:TypeError "参数1必须是类型,而不是classobj"当父不继承对象
- Python内存泄漏
- 实现嵌套字典的最佳方法是什么?
- 如何在tensorflow中获得当前可用的gpu ?