Polars链式表达式失效:新增列total_area无法被识别
问题分析与解决
错误根源
你代码里的核心问题是:在链式调用的后续with_columns中,你始终在操作最初定义的df对象(比如df.select(pl.cum_sum("total_area"))),但total_area是在前一步with_columns中才添加的列,原始df里根本不存在这个列,所以Polars找不到它。
另外,with_columns不需要手动创建pl.Series,直接用Polars表达式就能完成列的计算与添加,这才是Polars的正确用法。
修正后的代码
import numpy as np import polars as pl data = np.random.random((50,5)) df = pl.from_numpy(data, schema=["id", "sampling_time", "area", "val1", "area_corr"]) result_df = (df .with_columns([ pl.col("id").cast(pl.Int32), # 直接用表达式计算total_area,无需手动创建Series (pl.col("area") + pl.col("area_corr")).alias("total_area") ]) .with_columns([ # 直接引用前一步生成的total_area,用cum_sum计算 (pl.col("total_area").cum_sum() / 0.15).alias("cumulative_area") ]) .with_columns([ pl.col("cumulative_area").cast(pl.Int32).alias("parcel_id") ]) ) print(result_df.head())
关键说明
- 每一步
with_columns中的表达式,都是基于前一步处理后的DataFrame上下文,所以可以直接引用上一步新增的列(比如total_area)。 - 使用
.alias()来为新计算的列命名,这是Polars中添加新列的标准方式,无需手动构造pl.Series。 - 如果你想用链式调用的方式,所有操作都要基于链式中的上下文,而不是原始的
df变量。
内容的提问来源于stack exchange,提问作者jpmorr
相关产品推荐
相关产品推荐

