我在python pandas DataFrame中有一个列,具有布尔True/False值,但对于进一步的计算,我需要1/0表示。有没有一种快速的熊猫/numpy方法来做到这一点?
当前回答
在Python中True为1,同样False为0*:
>>> True == 1
True
>>> False == 0
True
你应该能够对它们执行任何你想要的操作,只要把它们当作数字来对待,因为它们就是数字:
>>> issubclass(bool, int)
True
>>> True * 5
5
所以回答你的问题,不需要工作,你已经有了你要找的东西。
*注意我使用is作为一个英语单词,而不是Python关键字is - True将不会是与任何随机1相同的对象。
其他回答
这个问题特别提到了一个列,所以目前公认的答案是有效的。但是,它不能泛化到多个列。对于那些对通用解决方案感兴趣的人,请使用以下方法:
df.replace({False: 0, True: 1}, inplace=True)
这适用于包含许多不同类型列的DataFrame,而不管有多少是布尔类型。
我必须将FAKE/REAL映射到0/1,但找不到正确的答案。
请在下面找到如何将列名'type'的值为FAKE/REAL映射为0/1(注意:类似的可以应用于任何列名和值)
df.loc[df['type'] == 'FAKE', 'type'] = 0
df.loc[df['type'] == 'REAL', 'type'] = 1
使用系列。转换布尔值到整数的视图:
df["somecolumn"] = df["somecolumn"].view('i1')
这是一个基于现有答案的可重复的例子:
import pandas as pd
def bool_to_int(s: pd.Series) -> pd.Series:
"""Convert the boolean to binary representation, maintain NaN values."""
return s.replace({True: 1, False: 0})
# generate a random dataframe
df = pd.DataFrame({"a": range(10), "b": range(10, 0, -1)}).assign(
a_bool=lambda df: df["a"] > 5,
b_bool=lambda df: df["b"] % 2 == 0,
)
# select all bool columns (or specify which cols to use)
bool_cols = [c for c, d in df.dtypes.items() if d == "bool"]
# apply the new coding to a new dataframe (or can replace the existing one)
df_new = df.assign(**{c: lambda df: df[c].pipe(bool_to_int) for c in bool_cols})
只需将你的数据帧乘以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
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行