如何用Polars表达式API将列表列转为连续元素对?
Polars高效转换列表为连续元素对的实现方法
可以用Polars表达式API高效完成这个转换,核心是利用list.chunks方法分割列表,再将每个子块转为元组,具体代码如下:
import polars as pl pl.Config(fmt_table_cell_list_len=6, fmt_str_lengths=100) df = pl.DataFrame({'col 1': [[1, 2, 3, 4, 5, 6],[11, 12, 13, 14, 15, 16],[21, 22, 23, 24, 25, 26]]}) # 转换操作 result_df = df.with_columns( pl.col("col 1") .list.chunks(2) # 将每个列表分割为长度为2的连续子列表 .list.eval(pl.element().tuple()) # 将每个子列表转为元组 .alias("paired_col") ) print(result_df)
执行后输出结果:
shape: (3, 2) ┌──────────────────────────┬───────────────────────────────────┐ │ col 1 │ paired_col │ │ --- │ --- │ │ list[i64] │ list[tuple[i64, i64]] │ ╞══════════════════════════╪═══════════════════════════════════╡ │ [1, 2, 3, 4, 5, 6] │ [(1, 2), (3, 4), (5, 6)] │ │ [11, 12, 13, 14, 15, 16] │ [(11, 12), (13, 14), (15, 16)] │ │ [21, 22, 23, 24, 25, 26] │ [(21, 22), (23, 24), (25, 26)] │ └──────────────────────────┴───────────────────────────────────┘
代码说明
list.chunks(2):按顺序将每个输入列表分割为长度为2的连续子列表,精准匹配两两分组的需求。list.eval(pl.element().tuple()):对分割后的每个子列表执行转换,将列表类型转为元组类型,得到目标格式的元组列表。
这种方式基于Polars向量化表达式API实现,完全避免Python循环,性能远高于逐行处理,适合大规模数据场景。
内容的提问来源于stack exchange,提问作者exch_cmmnt_memb
相关产品推荐
相关产品推荐

