Column of lists, convert list to string as a new column
One way you could do it is to use list comprehension, str
, and join
:
df['liststring'] = df.lists.apply(lambda x: ', '.join([str(i) for i in x]))
Output:
lists liststring
1 [1, 2, 12, 6, ABC] 1, 2, 12, 6, ABC
2 [1000, 4, z, a] 1000, 4, z, a
List Comprehension
If performance is important, I strongly recommend this solution and I can explain why.
df['liststring'] = [','.join(map(str, l)) for l in df['lists']]
df
lists liststring
0 [1, 2, 12, 6, ABC] 1,2,12,6,ABC
1 [1000, 4, z, a] 1000,4,z,a
You can extend this to more complicated use cases using a function.
def try_join(l):
try:
return ','.join(map(str, l))
except TypeError:
return np.nan
df['liststring'] = [try_join(l) for l in df['lists']]
Series.apply
/Series.agg
with ','.join
You need to convert your list items to strings first, that's where the map
comes in handy.
df['liststring'] = df['lists'].apply(lambda x: ','.join(map(str, x)))
Or,
df['liststring'] = df['lists'].agg(lambda x: ','.join(map(str, x)))
<!- >
df
lists liststring
0 [1, 2, 12, 6, ABC] 1,2,12,6,ABC
1 [1000, 4, z, a] 1000,4,z,a
pd.DataFrame
constructor with DataFrame.agg
A non-loopy/non-lambda solution.
df['liststring'] = (pd.DataFrame(df.lists.tolist())
.fillna('')
.astype(str)
.agg(','.join, 1)
.str.strip(','))
df
lists liststring
0 [1, 2, 12, 6, ABC] 1,2,12,6,ABC
1 [1000, 4, z, a] 1000,4,z,a
All of these didn't work for me (dealing with text data) what worked for me is this:
df['liststring'] = df['lists'].apply(lambda x: x[1:-1])