Pandas 分解错误 - 列必须是标量
Pandas explode error - column must be scalar
df.explode(['X'])
ValueError: column must be a scalar
嗨,有人可以就此提出建议吗?
如果您查看 explode
的函数签名,它必须是标量列名称(str
或 tuple
),并且您传递的是 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
df.explode(['X'])
ValueError: column must be a scalar
嗨,有人可以就此提出建议吗?
如果您查看 explode
的函数签名,它必须是标量列名称(str
或 tuple
),并且您传递的是 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