如何在Polars中垂直合并两个LazyFrame?
如何在Polars中垂直合并两个LazyFrame?
嗨,我来帮你搞定这个问题!你说的没错,extend()、vstack()这些确实是Polars中**Eager模式(DataFrame)**的专属方法,LazyFrame确实不支持,但其实垂直合并LazyFrame的正确方式你已经摸到边了——就是用pl.concat(),只是可能你之前的调用方式不对,或者对它的特性不太清楚~
首先要明确:pl.concat()完全支持LazyFrame的垂直合并,而且全程保持Lazy模式,不需要提前collect()任何一个LazyFrame,完美避免你担心的计算资源浪费问题。如果你之前调用pl.concat()时报错,大概率是没有把LazyFrame放进列表里——这个方法要求传入一个包含LazyFrame的可迭代对象(比如列表),而不是直接传两个独立的参数哦。
举个实际的例子,假设你有两个结构匹配的LazyFrame:
import polars as pl # 创建两个测试用的LazyFrame lf1 = pl.LazyFrame({"id": [1,2,3], "value": [10,20,30]}) lf2 = pl.LazyFrame({"id": [4,5,6], "value": [40,50,60]})
只需要把它们放进一个列表里传给pl.concat()就行:
# 垂直合并两个LazyFrame,全程保持Lazy状态 merged_lf = pl.concat([lf1, lf2])
这时候merged_lf还是一个LazyFrame,只有当你调用merged_lf.collect()的时候才会真正执行计算,完全符合你的需求。
如果你的两个LazyFrame列名或者数据类型不完全匹配,也不用慌,可以加上how="vertical_relaxed"参数,Polars会自动对齐列名,缺失的列用null填充:
# 假设lf3少了一个列,用vertical_relaxed模式合并 lf3 = pl.LazyFrame({"id": [7,8,9]}) relaxed_merged = pl.concat([lf1, lf3], how="vertical_relaxed")
至于你提到的join(),那是用于横向合并(关联)的,和垂直合并的场景完全不同,所以确实不是你需要的工具~
备注:内容来源于stack exchange,提问作者realbitsurfer
相关产品推荐
相关产品推荐

