我有一个混合数据类型的数据框。我想创建一个遍历所有列并将所有包含True/False
的列转换为int32
类型0/1
的函数。我在下面尝试了一个lambda函数,其中d是我的数据帧:
f = lambda x: 1 if x==True else 0
d.applymap(f)
这不起作用,它也将我所有的非布尔列都转换为0/1
。是否有一个很好的方法可以遍历数据框,并使除布尔列之外的所有内容都保持不变,并将它们转换为0和1?任何帮助表示赞赏!
答案 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)