How to convert multiple pandas columns from string boolean to boolean?

Tags: , ,



I have this dataframe

data = [['Tom', 16, 'True','False'], ['Nick', 19, 'False','True'], ['Juli', 17, 'True','True']] 
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Writer','Artist']) 

I want to convert the string booleans to booleans.

I have tried

def str_to_bool(s):
    if s == 'True':
         return True
    elif s == 'False':
         return False
    else:
         raise ValueError

df[['Writer','Artist']] = df[['Writer','Artist']].apply(str_to_bool)

and

import ast
df[['Writer','Artist']] = df['Writer','Artist'].map(ast.literal_eval)

but neither of these worked.

Is it possible to do convert the type of multiple columns in a single line or do I have to convert the relevant columns one at a time?

Answer

You can use the dictionary version of replace.

df = df.replace({'True': True, 'False': False})

df
   Name  Age  Writer  Artist
0   Tom   16    True   False
1  Nick   19   False    True
2  Juli   17    True    True

dtypes
Name      object
Age        int64
Writer      bool
Artist      bool
dtype: object



Source: stackoverflow