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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:42:46