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

Rust中LazyFrame的fill_null如何实现DataFrame的FillNullStrategy功能?

Rust Polars LazyFrame 实现FillNullStrategy等效功能

在Rust版Polars中,LazyFrame的fill_null确实没有直接提供DataFrame那样的FillNullStrategy枚举接口,但可以通过Expr层面的内置方法直接实现对应的填充逻辑,无需手动写when/then,也不用先collect再转回LazyFrame。

核心解决方法

Polars的Expr类型提供了和FillNullStrategy一一对应的方法:

  • 前向填充(对应FillNullStrategy::Forward):使用forward_fill(None)
  • 后向填充(对应FillNullStrategy::Backward):使用backward_fill(None)
  • 常量填充:直接用lit(常量值)

示例1:全局前向填充所有列

use polars::prelude::*;

// 假设你已有一个LazyFrame实例lf
let lf_filled = lf.fill_null(col("*").forward_fill(None));

示例2:全局常量填充

// 用0填充所有空值
let lf_filled = lf.fill_null(lit(0));

示例3:按列指定不同填充策略

如果需要对不同列用不同规则,用with_columns更灵活:

let lf_filled = lf.with_columns([
    col("numeric_col").fill_null(lit(0)),
    col("time_series_col").fill_null(col("time_series_col").forward_fill(None)),
    col("category_col").fill_null(col("category_col").backward_fill(None)),
]);

你之前代码失效的原因

你的代码存在两个关键问题:

  1. col("*").is_null()会生成一个全局布尔列,无法精准匹配每一列自身的空值;
  2. .otherwise(col(name))中的name未与当前处理的列绑定,逻辑不匹配,导致填充规则未正确应用。

内容的提问来源于stack exchange,提问作者Dinaiscoding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:42:36