You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars中explode列表列时出现列长度不匹配如何解决?

解决Polars中explode列表列时的长度不匹配问题

问题

我有一个包含列表列(list)和另外两列(a、b)的表格,想要拆分列表列的同时保留另外两列的值。比如一行数据是a='q'、b='p'、list=['hello','bye'],期望拆分成两行,a、b值不变,list分别为'hello'和'bye'。但用pl.select(pl.exclude("list"), pl.col("list").explode())时出现长度不匹配错误,该怎么解决?

解决方案

不要在select()里单独处理列表列,直接调用DataFrame的explode()方法即可,它会自动复制其他列的值来匹配拆分后的列表列长度:

示例代码

import polars as pl

# 创建测试DataFrame
df = pl.DataFrame({
    "a": ["q"],
    "b": ["p"],
    "list": [["hello", "bye"]]
})

# 执行explode操作
exploded_df = df.explode("list")
print(exploded_df)

输出结果

shape: (2, 3)
┌─────┬─────┬───────┐
│ a   ┆ b   ┆ list  │
│ --- ┆ --- ┆ ---   │
│ str ┆ str ┆ str   │
╞═════╪═════╪═══════╡
│ q   ┆ p   ┆ hello │
│ q   ┆ p   ┆ bye   │
└─────┴─────┴───────┘

错误原因

pl.select()的作用是选择/转换列,单独对list列explode()后,它的长度变为2,而pl.exclude("list")选中的a、b列长度还是1,Polars不允许列长度不一致,所以抛出错误。而df.explode()是Polars专门设计的列表拆分方法,会自动处理其他列的复制逻辑,确保所有列长度一致。

如果需要拆分多个列表列,直接传入列名列表即可:df.explode(["list_col1", "list_col2"])


内容的提问来源于stack exchange,提问作者linus heinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:20