Reputation: 380
I try to convert a DataFrame Column of Lists to String. The Column contains of Lists and NaN Values
Table:
id col_list
1 ['Lorem ipsum dolor sit amet', 'Donec non sem convallis', 'vulputate odio']
2 NaN
3 ['Mauris diam purus', 'luctus in rutrum venenatis', 'eros in luctus lobortis']
4 ['Lorem ipsum dolor sit amet']
Output:
id col_list
1 'Lorem ipsum dolor sit amet, Donec non sem convallis, vulputate odio'
2 NaN
3 'Mauris diam purus, luctus in rutrum venenatis, eros in luctus lobortis
4 'Lorem ipsum dolor sit amet'
Following approach throws this error message
df['col_list'] = [','.join(elems) for elems in df['col_list']]
TypeError: can only join an iterable
Upvotes: 1
Views: 616
Reputation: 13255
Use apply
:
mask = ~df['col_list'].isna()
df.loc[mask , 'col_list'] = df.loc[mask, 'col_list'].apply(lambda x: ', '.join(x))
#or
df.loc[mask, 'col_list'] = [','.join(elems) for elems in df.loc[mask, 'col_list']]
Upvotes: 1
Reputation: 25259
Filter NaN
by using dropna
and agg.join
and assign back:
df['col_list'] = df.col_list.dropna().agg(', '.join)
Out[205]:
id col_list
0 1 Lorem ipsum dolor sit amet, Donec non sem convallis, vulputate odio
1 2 NaN
2 3 Mauris diam purus, luctus in rutrum venenatis, eros in luctus lobortis
3 4 Lorem ipsum dolor sit amet
Upvotes: 1