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)), ]);
你之前代码失效的原因
你的代码存在两个关键问题:
col("*").is_null()会生成一个全局布尔列,无法精准匹配每一列自身的空值;.otherwise(col(name))中的name未与当前处理的列绑定,逻辑不匹配,导致填充规则未正确应用。
内容的提问来源于stack exchange,提问作者Dinaiscoding
相关产品推荐
相关产品推荐

