我有一个数据集,它有一个特定的列,其值类似于下面的列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]