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
相关产品推荐
相关产品推荐

