我在python pandas DataFrame中有一个列,具有布尔True/False值,但对于进一步的计算,我需要1/0表示。有没有一种快速的熊猫/numpy方法来做到这一点?
当前回答
将布尔值的单列转换为整数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相同的对象。
使用系列。转换布尔值到整数的视图:
df["somecolumn"] = df["somecolumn"].view('i1')
我必须将FAKE/REAL映射到0/1,但找不到正确的答案。
请在下面找到如何将列名'type'的值为FAKE/REAL映射为0/1(注意:类似的可以应用于任何列名和值)
df.loc[df['type'] == 'FAKE', 'type'] = 0
df.loc[df['type'] == 'REAL', 'type'] = 1
你可以为你的数据帧使用一个转换:
df = pd.DataFrame(my_data condition)
将True/False转换为1/0
df = df*1
这是一个基于现有答案的可重复的例子:
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})
推荐文章
- 如何从Python函数中返回两个值?
- 前一个月的Python日期
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- Python日志记录不输出任何东西
- 每n秒运行特定代码
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何将python datetime转换为字符串,具有可读格式的日期?
- 美丽的汤和提取div及其内容的ID
- 在Python中重置生成器对象
- 用Python构建最小的插件架构
- model.eval()在pytorch中做什么?
- Tensorflow 2.0:模块“Tensorflow”没有属性“Session”
- 从环境文件中读入环境变量
- 在OSX 10.11中安装Scrapy时,“OSError: [Errno 1]操作不允许”(El Capitan)(系统完整性保护)
- 如何删除熊猫数据帧的最后一行数据