在具有混合数据类型的数据帧中将所有出现的True/False转换为1/0

mun*_*uni 6 python data-manipulation

我有一个大约有100列的数据框,有一些布尔列和一些字符.我想替换所有具有值True/False的布尔值以及-1和1/0的布尔值.我想将它应用于整个数据帧而不是单列.

我在这里看到了一些解决方案,比如将列转换为整数.但是我想避免通过100列的练习.

这是我尝试失败的事情:

test.applymap(lambda x: 1 if x=='True' else x)
test.applymap(lambda x: 0 if x=='False' else x)
Run Code Online (Sandbox Code Playgroud)

但是数据帧测试仍然是True/False

Dee*_*ace 10

applymap 默认情况下不是就地,它将返回一个新的数据帧.

正确的方法:

test = test.applymap(lambda x: 1 if x == True else x)
test = test.applymap(lambda x: 0 if x == False else x)
Run Code Online (Sandbox Code Playgroud)

要么

test = test.applymap(lambda x: 1 if x == True else x).test.applymap(lambda x: 0 if x=='False' else x)
Run Code Online (Sandbox Code Playgroud)

或者干脆

test.applymap(lambda x: 1 if x == True else x, inplace=True)
test.applymap(lambda x: 0 if x == False else x, inplace=True)
Run Code Online (Sandbox Code Playgroud)


虽然replace似乎是实现这一目标的最佳方式:

test.replace(False, 0, inplace=True)
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 5

对于单个列,目前最简单的方法是转换列类型。Pandas 足够聪明,可以正确地将 boolean 映射到 int。

df.column_name = df.column_name.astype(int)
Run Code Online (Sandbox Code Playgroud)

如果 df.column_name 以 开头Boolean,则转换为 type 后会变为 0 和 1int