我在 python pandas
DataFrame 中有一个具有布尔True
/False
值的列,但对于进一步的计算,我需要1
/0
表示。有没有一种快速pandas
/numpy
方法可以做到这一点?
问问题
249825 次
9 回答
426
将单列布尔值转换为整数列 1 或 0 的简洁方法:
df["somecolumn"] = df["somecolumn"].astype(int)
于 2014-12-08T16:36:19.740 回答
86
只需将您的数据框乘以 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
于 2016-06-05T21:54:35.933 回答
48
True
在1
Python 中,同样False
是0
*:
>>> True == 1
True
>>> False == 0
True
您应该能够对它们执行任何您想要的操作,只需将它们视为数字,因为它们是数字:
>>> issubclass(bool, int)
True
>>> True * 5
5
因此,要回答您的问题,无需工作 - 您已经拥有了您正在寻找的东西。
* 注意我使用is作为英文单词,而不是 Python 关键字is
-True
与任何 random 都不是同一个对象1
。
于 2013-06-29T17:58:36.213 回答
24
您也可以直接在 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
于 2013-06-29T18:17:18.243 回答
24
这个问题特别提到了一个列,因此当前接受的答案有效。但是,它不能推广到多列。对于那些对通用解决方案感兴趣的人,请使用以下内容:
df.replace({False: 0, True: 1}, inplace=True)
这适用于包含许多不同类型的列的 DataFrame,无论有多少是布尔值。
于 2020-12-21T15:30:20.543 回答
3
您可以对数据框使用转换:
df = pd.DataFrame(my_data condition)
将 True/False 转换为 1/0
df = df*1
于 2019-12-24T20:27:18.510 回答
3
用于Series.view
将布尔值转换为整数:
df["somecolumn"] = df["somecolumn"].view('i1')
于 2020-04-13T12:41:54.867 回答
1
我不得不将 FAKE/REAL 映射到 0/1,但找不到正确的答案。
请在下面找到如何将具有 FAKE/REAL 值的列名称“类型”映射到 0/1
(注意:类似的可以应用于任何列名称和值)
df.loc[df['type'] == 'FAKE', 'type'] = 0
df.loc[df['type'] == 'REAL', 'type'] = 1
于 2020-09-29T21:39:25.047 回答
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})
于 2022-01-17T14:35:08.340 回答