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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:23:12