Давайте изменим вашу лямбду, чтобы использовать 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)