jonas
jonas

Reputation: 380

DataFrame column of Lists and NaN to String

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

Answers (2)

Space Impact
Space Impact

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

Andy L.
Andy L.

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

Related Questions