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

如何用Polars表达式通过列非空值采样填充DataFrame空值?

在Polars中用表达式实现空值随机采样填充

完全可以用Polars表达式语法实现,不用写Python循环,代码更简洁且性能更优。

实现思路

针对每一列,提取其非空值集合,然后对该列的空值位置,随机采样对应数量的非空值进行填充,全程保持列数据类型一致。

代码示例

首先定义示例DataFrame:

import polars as pl

daf = pl.DataFrame({
    "a": [1,2, None, None, 5, 6, None, None, None, 10],
    "b": [None, "two", "three", None, "five", "six", "seven", None, "nine", "ten"]
})

然后用Polars表达式完成填充:

filled_daf = daf.with_columns(
    pl.all().map_batches(
        lambda col: col.fill_null(
            pl.Series(
                col.drop_nulls().sample(
                    n=col.is_null().sum(), 
                    replace=True, 
                    shuffle=True
                )
            )
        )
    )
)

代码说明

  • pl.all():一次性选中所有列,无需逐个列指定
  • map_batches():对每个列独立执行填充逻辑,保证列级别的处理隔离
  • col.drop_nulls():获取当前列的所有非空值,作为采样池
  • sample(...):采样数量等于当前列的空值总数,replace=True 允许重复采样(避免非空值数量不足时报错),shuffle=True 保证采样结果随机
  • pl.Series():将采样结果转为与原列类型一致的序列,确保填充后列类型不改变
  • fill_null():用生成的采样序列替换原列的空值

每次运行代码得到的填充结果都会不同,符合“填充值不固定为同一值”的要求,且完全保留原列的数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:09