用 isnull().mean() 一行计算空值比例,返回各列空值占比(0~1);它比 info() 更精准、可筛选、可导出,且需配合 replace 处理空字符串等伪空值。

用 isnull() + mean() 一行搞定
空值比例本质是布尔序列的均值:每列调用 isnull() 得到 True/False,True 被当 1 处理,mean() 直接返回占比。比手动数 count() 和 shape 更稳、更短。
-
df.isnull().mean()返回Series,索引为列名,值为该列空值占比(0~1) - 想看前 5 列?加
.head(5);想只看 >5% 的?加[df.isnull().mean() > 0.05] - 注意:
NaN、None、pd.NA都会被isnull()捕获,但空字符串''不算——需额外处理
为什么不用 info() 查空值比例?
info() 只显示非空计数(Non-Null Count),要自己算比例还得查 len(df),容易手误。而且它不支持条件筛选或导出数值,纯属交互式概览用。
-
df.info()输出里Non-Null Count是整数,不是比例,没法直接排序或阈值过滤 - 如果列太多,
info()默认截断,关键列可能看不到 - 想导出为空值报告 CSV?
isnull().mean()可直接转to_frame('missing_ratio'),info()不行
处理空字符串和特殊占位符(如 'N/A'、'NULL')
真实数据里常混入人为标记的“伪空值”,isnull() 对它们完全无感。得先统一替换再统计。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 常见操作:
df.replace(['', 'N/A', 'NULL', 'null'], pd.NA).isnull().mean() - 注意顺序:必须先
replace再isnull(),反了没用 - 若只想针对某几列处理(比如只清理字符串列),可用
select_dtypes('object')配合replace - 警惕大小写:
'n/a'和'N/A'不等价,必要时加case=False参数
性能差异:大表别用 describe(include='all')
describe() 看似能顺带看到 count,但它会触发全量类型推断和多维统计,对千万行以上 DataFrame 明显变慢,且空值信息藏在中间字段里,提取麻烦。
-
isnull().mean()是纯布尔运算 + 向量化求均值,速度基本与列数线性相关,不随行数爆炸 -
describe(include='all')在含大量 object 列时尤其卡顿,还可能因内存不足报MemoryError - 验证方法:用
%timeit对比,100 万行 × 50 列下,前者通常快 3–5 倍
空值检测本身简单,但“哪些值算空”和“怎么嵌入后续流程”才是实际卡点。别依赖 info() 做判断,也别漏掉业务定义的伪空值——这两处最容易在交接或上线后突然冒问题。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










