Pandas:我如何只对特定列的list的列表进行扁平化?



我有一个数据集,它有一个特定的列,其值类似于下面的列col2的虚拟数据框架。列条目要么是一个列表,要么是列表的列表,我只想将列表的列表扁平化为单个列表。

col1                  col2
0    tom                  [10]
1   nick              [15, 24]
2   juli  [[16, 14], [19, 17]]
3  harry              [23, 15]
4  frank  [[15, 16], [50, 30]]

我希望我期望的数据框架类似于这样的东西-

col1              col2
0    tom              [10]
1   nick          [15, 24]
2   juli  [16, 14, 19, 17]
3  harry          [23, 15]
4  frank   [15, 16, 50, 3]

我尝试使用DF['col2'] = DF.col2.apply(lambda x: sum(x, [])),但它没有工作返回错误-TypeError: can only concatenate list (not "str") to list

我怎样才能优雅地解决这个问题?

您可以使用np.ravel,如下所示:

df['col2'] = df['col2'].map(np.ravel)

注意,这假定您的列表是真正的列表,而不是看起来像列表的字符串。如果不是这种情况,可以先将字符串转换为实际列表,如下所示:

import ast
df['col2'] = df['col2'].apply(ast.literal_eval)
# Then, run the code:
df['col2'] = df['col2'].map(np.ravel)

结果:

print(df)
col1              col2
0    tom              [10]
1   nick          [15, 24]
2   juli  [16, 14, 19, 17]
3  harry          [23, 15]
4  frank  [15, 16, 50, 30]

相关内容

最新更新