如何在Polars中以纯Polars方式将两个列表打包成结构体?
纯Polars方式实现列表元素配对打包
要实现两个列表元素按位置一一对应打包,无需借助Python的lambda或zip,可以用Polars内置的列表操作表达式完成,性能更优且符合纯Polars的向量化风格:
简洁实现方案
import polars as pl df = pl.DataFrame({ "first_name": [["John", "Jane", "Alice"]], "score": [[70, 80, 90]] }) # 直接将两个列表按位置配对后转为字典 df = df.with_columns( l=pl.list.zip_with(pl.col("first_name"), pl.col("score")).list.to_dict() ) print(df)
分步解释
pl.list.zip_with(col1, col2):Polars内置的向量化函数,将两个列表的对应位置元素配对成子列表,比如把["John", "Jane"]和[70,80]转为[["John",70], ["Jane",80]].list.to_dict():将配对后的子列表直接转换为字典,自动把每个子列表的第一个元素作为键,第二个作为值,和原代码dict(zip(...))的输出结果完全一致
可选的结构化中间步骤
如果需要更明确的字段定义,可以先将配对元素转为结构体再转字典,可读性更强:
df = df.with_columns( l=pl.list.zip_with(pl.col("first_name"), pl.col("score")) .list.eval(pl.struct(name=pl.element()[0], score=pl.element()[1])) .list.to_dict() )
优势对比
原代码使用map_elements调用Python函数,属于逐行的Python层面操作,在处理大数据集时性能会受限;纯Polars方案全程用内置向量化表达式,避免了Python循环开销,执行效率更高。
内容的提问来源于stack exchange,提问作者apostofes
相关产品推荐
相关产品推荐

