分解元素数量不匹配的 Pandas 数据框

问题描述 投票:0回答:1

我正在处理这样的数据集,我想用每个列表的内容来分解它。

index    col1      col2      col3
    1   [A,B]     [,xx]     [1,2]
    2   [A,C]   [zz,xx]     [3,4]
    3    [D,]   [zz,yy]     [2,2]

但是,

[,xx]
[D,]
中的缺失值会产生错误,我正在寻找一种方法来填充这些列表中的空位置。

我的想法是填充列表中的空白以获得类似

[NaN,xx]
[D,NaN]
的内容,而不指定列表中的索引,因为空白并不总是位于相同的位置。

我怎样才能实现这个目标?

python pandas list explode
1个回答
0
投票

[,xx]
(或
[,'xx']
)不能是有效的Python对象。

[,'xx']
# SyntaxError: invalid syntax

只有

['xx']
可以,但在这种情况下,无法区分将转换为
['xx', NaN]
[NaN, 'xx']
的内容。

因此,假设您有类似列表对象的字符串表示

'[,xx]'
),您可以在爆炸之前剥离
[
/
]
并在
,
上拆分:

cols = ['col1', 'col2', 'col3']

out = (df[cols]
       .applymap(lambda x: x.strip('[]').split(','))  # convert to lists
       .explode(cols)                                 # explode
       .join(df.drop(columns=cols))[df.columns]       # add other columns
      )

注意。在最新版本的 pandas 中,将

applymap
替换为
map

输出:

   index col1 col2 col3
0      1    A         1
0      1    B   xx    2
1      2    A   zz    3
1      2    C   xx    4
2      3    D   zz    2
2      3        yy    2

使用的输入:

df = pd.DataFrame({'index': [1, 2, 3],
                   'col1': ['[A,B]', '[A,C]', '[D,]'],
                   'col2': ['[,xx]', '[zz,xx]', '[zz,yy]'],
                   'col3': ['[1,2]', '[3,4]', '[2,2]']})
© www.soinside.com 2019 - 2024. All rights reserved.