Python:将列单元格中的每个数组转换为单个字符串

时间:2018-10-19 11:16:13

标签: python arrays pandas dataframe type-conversion

我的数据框如下:

df = pd.DataFrame({'col1': [1, 2, 3 ,4 , 5, 6], 'txt': [[2354],[103, 132, 2457],[132, 1476, 6587],[103, 2457],[103, 1476, 2354], np.nan]})

   col1                txt
0     1             [2354]
1     2   [103, 132, 2457]
2     3  [132, 1476, 6587]
3     4        [103, 2457]
4     5  [103, 1476, 2354]
5     6                NaN

“ txt”列在每个单元格中包含一个数组或NaN。

现在,我想保持数据框结构不变,但是数组应该是一个字符串,其中包含所有用逗号分隔的元素。

必需的输出(使用字符串而不是数组):

   col1                txt
0     1               2354
1     2     103, 132, 2457
2     3    132, 1476, 6587
3     4          103, 2457
4     5    103, 1476, 2354
5     6                NaN

我发现的解决方案不适用于某列。

谢谢。

1 个答案:

答案 0 :(得分:1)

仅在过滤的行中使用列表推导-如果没有缺失值,则也必须使用map将所有数字列转换为字符串-或在生成器中强制转换为字符串:

mask = df['txt'].notnull()
df.loc[mask, 'txt'] = [', '.join(map(str, x)) for x in df.loc[mask, 'txt']]
#alternative solution
#df.loc[mask, 'txt'] = df.loc[mask, 'txt'].apply(lambda x: ', '.join(map(str, x)))
#another solution
#df.loc[mask, 'txt'] = [', '.join(str(i) for i in x) for x in df.loc[mask, 'txt']]

print (df)
   col1              txt
0     1             2354
1     2   103, 132, 2457
2     3  132, 1476, 6587
3     4        103, 2457
4     5  103, 1476, 2354
5     6              NaN