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

Polars如何无需硬编码列表长度将列表列拆分为多列?

拆分Polars中固定长度列表列为多列(无需硬编码长度)

如果你的DataFrame中列a的所有列表元素长度一致,不用硬编码长度就能拆分的方法有两种:

方法一:动态生成列表达式

先获取列表的统一长度,再循环生成每个位置的提取表达式:

import polars as pl

# 示例DataFrame
df = pl.DataFrame({'a': [[1,2], [3,4], [5,6]]})

# 获取列表长度(所有列表长度一致,取第一个即可)
list_length = df.select(pl.col('a').list.lengths().first()).item()

# 动态生成列并添加到DataFrame
result = df.with_columns([
    pl.col('a').list.get(i).alias(f'a_{i}') 
    for i in range(list_length)
])

方法二:转结构体后展开(更简洁)

利用Polars的list.to_struct()方法把列表转成结构体,再用unnest()展开成多列:

import polars as pl

df = pl.DataFrame({'a': [[1,2], [3,4], [5,6]]})

# 转结构体并展开
result = df.with_columns(pl.col('a').list.to_struct()).unnest('a')

这种方法会自动生成field_0、field_1这类列名,如果需要自定义列名,可以结合方法一中获取的长度来重命名:

list_length = df.select(pl.col('a').list.lengths().first()).item()
result = (
    df.with_columns(pl.col('a').list.to_struct())
    .unnest('a')
    .rename({f'field_{i}': f'a_{i}' for i in range(list_length)})
)

两种方法都能在未知列表长度的情况下完成拆分,方法二更简洁高效,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:04