在混合数据帧中将true / false转换为0/1布尔值

时间:2019-05-20 18:26:01

标签: pandas dataframe boolean

我有一个混合数据类型的数据框。我想创建一个遍历所有列并将所有包含True/False的列转换为int32类型0/1的函数。我在下面尝试了一个lambda函数,其中d是我的数据帧:

f = lambda x: 1 if x==True else 0
d.applymap(f)

这不起作用,它也将我所有的非布尔列都转换为0/1。是否有一个很好的方法可以遍历数据框,并使除布尔列之外的所有内容都保持不变,并将它们转换为0和1?任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:2)

让我们修改您的lambda以使用isinstance检查:

df.applymap(lambda x: int(x) if isinstance(x, bool) else x)

只有类型bool的值将被转换为int,其他所有内容都保持不变。


作为更好的解决方案,如果列类型是标量的(而不是我最初给您的问题所假定的“混合”类型),则可以改用

u = df.select_dtypes(bool)
df[u.columns] = u.astype(int)

答案 1 :(得分:2)

您可以使用loc选择列并更改数据类型。

pd.concat(
    [df1, df2]
)

答案 2 :(得分:0)

如果您有数据框df,请尝试:

df_1=df.applymap(lambda x: int(x) if type(x)==bool else x)