I have this dataframe
JavaScript
x
3
1
data = [['Tom', 16, 'True','False'], ['Nick', 19, 'False','True'], ['Juli', 17, 'True','True']]
2
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Writer','Artist'])
3
I want to convert the string booleans to booleans.
I have tried
JavaScript
1
10
10
1
def str_to_bool(s):
2
if s == 'True':
3
return True
4
elif s == 'False':
5
return False
6
else:
7
raise ValueError
8
9
df[['Writer','Artist']] = df[['Writer','Artist']].apply(str_to_bool)
10
and
JavaScript
1
3
1
import ast
2
df[['Writer','Artist']] = df['Writer','Artist'].map(ast.literal_eval)
3
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?
Advertisement
Answer
You can use the dictionary version of replace.
JavaScript
1
16
16
1
df = df.replace({'True': True, 'False': False})
2
3
df
4
Name Age Writer Artist
5
0 Tom 16 True False
6
1 Nick 19 False True
7
2 Juli 17 True True
8
9
dtypes
10
Name object
11
Age int64
12
Writer bool
13
Artist bool
14
dtype: object
15
16