Pandas在列中展开列表列表?

2024-03-29 11:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试展开一列列表:

    var         var2
0   9122532.0   [[458182615.0], [79834910.0]]
1   79834910.0  [[458182615.0], [9122532.0]]
2   458182615.0 [[79834910.0], [9122532.0]]

我想要:

^{pr2}$

申请

sample8['var2'] = sample8['var2'].apply(chain.from_iterable).apply(list)

给我:

    var1        var2
0   9122532.0   [[, 4, 5, 8, 1, 8, 2, 6, 1, 5, ., 0, ], [, 7, ...
1   79834910.0  [[, 4, 5, 8, 1, 8, 2, 6, 1, 5, ., 0, ], [, 9, ...
2   458182615.0 [[, 7, 9, 8, 3, 4, 9, 1, 0, ., 0, ], [, 9, 1, ...

Tags: fromchain列表variterablelistapplyvar1
2条回答

考虑数据帧df

df = pd.DataFrame(dict(
        var=[9122532.0, 79834910.0, 458182615.0],
        var2=[[[458182615.0], [79834910.0]],
              [[458182615.0], [9122532.0]],
              [[79834910.0], [9122532.0]]]
    ))

print(df)

           var                           var2
0    9122532.0  [[458182615.0], [79834910.0]]
1   79834910.0   [[458182615.0], [9122532.0]]
2  458182615.0    [[79834910.0], [9122532.0]]

np.concatenate
您可以applynp.concatenate

^{pr2}$

w/o apply
这要求所有的2 x 1形状相同。它总是可以适应另一种形状。但是,这种方法仍然要求所有形状都是一致的。在

df.assign(var2=np.array(df.var2.tolist()).reshape(-1, 2).tolist())

           var                       var2
0    9122532.0  [458182615.0, 79834910.0]
1   79834910.0   [458182615.0, 9122532.0]
2  458182615.0    [79834910.0, 9122532.0]

计时
小数据

enter image description here

大数据

enter image description here

数据:

In [162]: df
Out[162]:
           var                           var2
0    9122532.0  [[458182615.0], [79834910.0]]
1   79834910.0   [[458182615.0], [9122532.0]]
2  458182615.0    [[79834910.0], [9122532.0]]

解决方案:使用np.ravel()

^{pr2}$

相关问题 更多 >