Python Polars中横向拼接LazyFrames时触发ValueError错误
Polars LazyFrame横向拼接报错的解决方法
在Polars 0.19.12版本中,pl.concat对LazyFrame确实不支持how="horizontal"参数,这是Lazy API和Eager API的差异点之一。要实现LazyFrame的横向拼接,推荐使用hstack方法——这是专门用于横向合并的API,同时支持Eager和Lazy模式。
解决代码示例
import polars as pl df_h1 = pl.DataFrame({"l1": [1, 2], "l2": [3, 4]}).lazy() df_h2 = pl.DataFrame({"r1": [5, 6], "r2": [7, 8], "r3": [9, 10]}).lazy() # 使用hstack实现横向拼接 result = df_h1.hstack(df_h2) # 执行延迟计算并输出结果 print(result.collect())
输出结果:
shape: (2, 5) ┌─────┬─────┬─────┬─────┬──────┐ │ l1 ┆ l2 ┆ r1 ┆ r2 ┆ r3 │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═════╪══════╡ │ 1 ┆ 3 ┆ 5 ┆ 7 ┆ 9 │ │ 2 ┆ 4 ┆ 6 ┆ 8 ┆ 10 │ └─────┴─────┴─────┴─────┴──────┘
补充说明
- 若坚持使用
pl.concat,可以先将LazyFrame转为Eager DataFrame再操作,但这会失去Lazy模式延迟计算的优势,不推荐:result = pl.concat([df_h1.collect(), df_h2.collect()], how="horizontal") hstack要求两个LazyFrame的行数一致,否则会报错,这和Eager模式下的横向拼接规则一致。
内容的提问来源于stack exchange,提问作者Cael Hasse
相关产品推荐
相关产品推荐

