df.isnull().any().any()返回True表示整个DataFrame至少存在一个空值,比sum().sum()>0更高效;df.isnull().any()定位含空列;df.isnull().sum()统计每列空值数量。

检查DataFrame整体是否含空值:用 df.isnull().any().any()
直接判断整个DataFrame有没有哪怕一个NaN或None,最简方式就是叠两次any():第一次按列返回布尔值(该列是否含空),第二次对结果Series再做一次any(),得到单个True/False。
常见错误是只写df.isnull().any()——它返回的是每列的判断结果,容易误以为True就代表“有空值”,其实那只是“某列有空值”,而你可能想确认的是“整个表有没有”。
-
df.isnull().any().any()→ 返回True表示至少一个空值存在 - 比
df.isnull().sum().sum() > 0更轻量,不统计具体数量 - 对大表性能友好,遇到第一个
True就会短路退出(底层C实现)
定位哪几列含空值:用 df.isnull().any()
这是最常被需要的操作——快速看出哪些字段有问题,方便后续决定drop、fill还是排查数据源。
注意any()默认按行轴(axis=0)操作,所以df.isnull().any()等价于df.isnull().any(axis=0),返回每列是否含空的Series。如果误加axis=1,会变成“哪几行含空”,通常不是你想要的。
- 结果中
True对应的列名,就是存在空值的字段 - 可链式过滤:
df.columns[df.isnull().any()].tolist()直接拿到问题列名列表 - 若列里全是
NaN,any()仍返回True;但all()才要求全部为真
统计每列空值数量:用 df.isnull().sum()
比起单纯判断“有没有”,多数场景需要知道“有多少”,尤其做清洗前评估工作量。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
sum()在布尔型DataFrame上会把True当1、False当0累加,所以df.isnull().sum()天然适合计数。别用count()——它统计非空值,方向反了。
-
df.isnull().sum()返回每列空值个数的Series - 加
.sort_values(ascending=False)可按空值量降序排列,一眼看到最脏的列 - 若某列类型是
category且含NaN,isnull()仍能正确识别(不像pd.isna()某些旧版本有bug)
为什么不用 pd.isna(df) 替代 df.isnull()?
两者功能几乎完全一致,df.isnull() 是pd.isna() 的实例方法封装,底层都调用同一个C函数。但实际使用中优先选df.isnull():
- 语义更直白:“这个DataFrame有没有空?”比“这个DataFrame是不是NA?”更符合中文思维
- 避免意外传入标量:比如
pd.isna(None)返回True,但None.isnull()会报错,用实例方法天然有类型保护 - 在Jupyter里敲
df.is+ Tab能自动补全,pd.isna要多敲几个字母
真正要注意的不是函数选哪个,而是别漏掉括号——写成df.isnull(没括号)返回的是方法对象,不是布尔结果,后续链式操作会静默失败。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










