我有一个大约有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)
但是数据帧测试仍然是True / False
答案 0 :(得分:10)
applymap
默认不到位,它会返回一个新的数据帧。
正确的方法:
test = test.applymap(lambda x: 1 if x == True else x)
test = test.applymap(lambda x: 0 if x == False else x)
或
test = test.applymap(lambda x: 1 if x == True else x).test.applymap(lambda x: 0 if x=='False' else x)
或只是
test.applymap(lambda x: 1 if x == True else x, inplace=True)
test.applymap(lambda x: 0 if x == False else x, inplace=True)
虽然replace
似乎是实现这一目标的最佳方式:
test.replace(False, 0, inplace=True)
答案 1 :(得分:4)
对于单个列,到目前为止,最简单的方法是转换列类型。熊猫足够聪明,可以正确地将布尔值映射到int。
df.column_name = df.column_name.astype(int)
如果df.column_name以Boolean
开头,在转换为int
类型后它将变为零和一。
答案 2 :(得分:0)
int(True)
或
int(1==1)
或与lambda一起使用:
lambda x:int(x)
True为1,False为0,-1为-1。
答案 3 :(得分:0)
定义一个在数据框的每一列中循环.replace()的函数:
def replace_boolean(data):
for col in data:
data[col].replace(True, 1, inplace=True)
data[col].replace(False, 0, inplace=True)
replace_boolean(test)
答案 4 :(得分:0)
您可以轻松地将其乘以1。如果这样做,您的所有数据框都会被转换:
df*1