missingno需手动安装,conda环境推荐conda install -c conda-forge missingno;使用前须确保数据为dataframe且缺失值为np.nan/none/pandas.na;msno.matrix()可快速定位缺失模式,msno.heatmap()反映缺失同步性,导出高清图需正确调用savefig并配置dpi与字体。

missingno 库安装与基础检查是否生效
missingno 不在 Python 标准库中,必须手动安装。直接运行 pip install missingno 即可,但要注意:如果用的是 conda 环境,conda install -c conda-forge missingno 更稳妥,避免与 matplotlib 或 pandas 版本冲突。
安装后别急着画图,先验证是否能正常加载数据并识别缺失值:
- 确保你的数据是
pandas.DataFrame类型,missingno对numpy.ndarray或字典不支持 - 缺失值必须是
np.nan、None或pandas.NA;字符串"NULL"、"missing"不会被识别为缺失,得先用df.replace()清洗 - 运行
msno.matrix(df)前,建议先看一眼df.isnull().sum(),确认确实有缺失值,否则图会全白
用 msno.matrix() 快速定位缺失模式
msno.matrix() 是最常用的视图,它把每行每列转成像素点,用颜色区分“有值”和“缺失”,适合快速发现缺失是否集中于某些列或某些样本段。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 默认行为会按缺失率排序列(从高到低),如果你关心原始列序,加参数
sort='none' - 行太多时图像拥挤,加
figsize=(10, 6)手动调大画布,或用sparkline=False关掉右侧行统计小条 - 如果缺失呈现明显分块(比如某几列在同样一批样本里同时为空),大概率说明这些字段来自同一数据源或同一采集环节,值得查 ETL 日志
- 注意:该图对类别型变量也有效,但不会做类型转换——只要单元格是
np.nan就标为缺失,不管它原本是字符串还是数值
用 msno.heatmap() 判断缺失值相关性
msno.heatmap() 计算的是“两个变量同时缺失”的频率,类似相关系数矩阵,数值越接近 1,说明两列缺失越同步。
- 它的底层计算基于配对缺失指示矩阵(即
df.isnull()后的布尔矩阵),不是原始值相关性 - 若某列缺失率极低(比如
- 热力图上出现强正相关(> 0.7)时,要警惕:可能是上游系统把整条记录写失败,而不是单个字段漏填;也可能是人为用统一占位符批量填充导致误判
- 不支持自定义距离度量,没法换成 Jaccard 或 Dice 系数,如有特殊需求得自己实现布尔矩阵的相似度计算
导出高清图与嵌入 Jupyter 的细节控制
missingno 返回的是 matplotlib.Axes 对象,不是图片文件,所以不能直接用 plt.savefig() 无脑保存。
- 正确做法是先获取返回值:
ax = msno.matrix(df),再调ax.figure.savefig('missing_matrix.png', dpi=300, bbox_inches='tight') - 在 Jupyter 中显示模糊?大概率是默认 DPI 太低,加
plt.rcParams['figure.dpi'] = 150提前设置,或在matrix()里传figsize和fontsize - 如果图中中文列名显示为方块,不是
missingno的锅,而是 matplotlib 缺少中文字体,需提前配置plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS'] - 别用
plt.show()叠加调用,missingno内部已触发绘图,重复调用会导致空白图或报RuntimeWarning: More than 20 figures have been opened
缺失图本身不解决数据问题,但它能精准指出“哪里不该空”——比如时间序列里某天所有传感器读数全空,或是用户表里邮箱和手机号同时缺失,这种模式比单列缺失率更有诊断价值。真正容易被忽略的是:画完图之后,没回溯缺失发生的时间点、数据来源模块或上游调度日志。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










