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

时间:2016-07-21 09:07:12

标签: 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)

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

5 个答案:

答案 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