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

如何在Polars DataFrame中无需遍历列即可统计每列的空值数量?

如何在Polars DataFrame中无需遍历列即可统计每列的空值数量?

当然有更省心的方法!Polars自带了专门的聚合函数,能一次性统计所有列的空值数量,不管是普通DataFrame还是LazyFrame都能用,完全不用手动循环遍历列,效率和简洁性都拉满。

1. 针对普通DataFrame的解决方案

直接调用null_count()方法就可以一步到位,代码示例如下:

import polars as pl

d = {"foo":[1,2,3, None], "bar":[4,None, None, 6]}
df_polars = pl.from_dict(d)

# 一键统计所有列的空值数量
null_count_df = df_polars.null_count()
print(null_count_df)

运行后会得到一个包含空值统计结果的DataFrame:

shape: (1, 2)
┌─────┬─────┐
│ foo ┆ bar │
│ --- ┆ --- │
│ u32 ┆ u32 │
╞═════╪═════╡
│ 1   ┆ 2   │
└─────┴─────┘

如果需要转成字典格式,只需要再做一步转换:

null_count_dict = dict(null_count_df.to_dict(as_series=False))
print(null_count_dict)  # 输出: {'foo': 1, 'bar': 2}

2. 针对LazyFrame的解决方案

如果用的是LazyFrame,也完全不用分块collect(),直接在LazyFrame上调用null_count(),最后统一执行collect()即可,避免了循环中多次收集数据的性能损耗:

# 创建LazyFrame
lazy_df = pl.from_dict(d).lazy()

# 先定义统计逻辑,最后统一收集结果
null_count_lazy = lazy_df.null_count().collect()
print(null_count_lazy)

输出结果和普通DataFrame的场景完全一致,而且Polars会自动优化查询计划,处理大数据时效率比循环方法高很多。

为什么这个方法更好?

  • 简洁性:一行代码替代循环逻辑,可读性更强,不容易出错
  • 性能优势:Polars的内置函数是向量化操作,比Python层面的循环快得多,尤其是数据量较大时
  • LazyFrame友好:不需要拆分查询多次collect(),能充分利用Polars的延迟执行优化能力

备注:内容来源于stack exchange,提问作者alvas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:53:12