Pandas 分解错误 - 列必须是标量

Pandas explode error - column must be scalar

df.explode(['X'])


ValueError: column must be a scalar

嗨,有人可以就此提出建议吗?

如果您查看 explode 的函数签名,它必须是标量列名称(strtuple),并且您传递的是 list.

例子

df = pd.DataFrame(index=['a', 'b'], 
                  data={'col1': [[10, 11]], 'col2': [[1, 2]]})

>>>df.explode('col1')                                                                                              
  col1    col2
a   10  [1, 2]
a   11  [1, 2]
b   10  [1, 2]
b   11  [1, 2]

>>>df.explode(['col1'])
ValueError: column must be a scalar

使用 df.explode('X') 而不是 df.explode(['X'])。 pandas explode page 上的示例解释了这一点。

您可以提供列名的列表或元组,但仅限于 pandas >= 1.3.0:请参阅 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.explode.html

New in version 1.3.0: Multi-column explode

如果你看到这个 ValueError 你一定是在使用旧版本的 pandas

对于那些使用 Pandas < 1.3 的人来说,以下逻辑执行多列分解并且相当高效。只需要替换你要爆破的cols的名字即可。

def explode(df):
    df['tmp']=df.apply(lambda row: list(zip(row[col1],row[col2])), axis=1) 
    df=df.explode('tmp')
    df[[col1,col2]]=pd.DataFrame(df['tmp'].tolist(), index=df.index)
    df.drop(columns='tmp', inplace=True)
    return df