Python数据分析之缺失值检测与处理详解

咖啡半糖
咖啡半糖
发布时间:2026-10-16| 3人浏览过
原创

本文详解Python Pandas中缺失值的检测与处理技巧。通过info()、isnull()等方法识别NaN数据,并深入解析dropna()删除策略(axis、how、thresh、subset参数)及fillna()填充方法(直接指定、ffill/bfill前向/后向填充、limit限制)。掌握这些核心参数,高效完成数据清洗。

检测缺失值

首先,我们需要构建一个包含缺失值的数据框来演示后续操作(DataFrame)。


import pandas as pd

df = pd.DataFrame(
    {'A': [None, 2, None, 4],
     'B': [10, None, None, 40], 
     'C': [100, 200, None, 400],
     'D': [None, 2000, 3000, None]})
df

在数值型数据中,Pandas将缺失值统一标识为 NaN(Not A Number)。接下来我们将介绍如何快速定位数据框中存在缺失值的列或行。

1. 使用 info() 方法

调用 info() 后,重点检查每一列对应的 Non-Null Count(非空计数)是否与 RangeIndex(索引范围总数)一致。若两者不相等,则说明该列存在缺失值。

2. 使用 isnull() 方法

isnull() 会返回一个与原 DataFrame 维度完全一致的数据框,其中每个位置的值表示该单元格是否为缺失值。


df.isnull()

结合 sum() 函数,可以统计每一列中缺失值的总数量。


df.isnull().sum()

利用 .T 属性对 DataFrame 进行转置,随后再次使用 sum(),即可统计每一行中缺失值的数量。


df.isnull().T.sum()

缺失值处理

删除缺失值

如果包含缺失值的行或列对分析结果影响较小,可以直接调用 dropna() 函数来移除这些含有缺失值的行或列。


df.dropna(axis=0,
          how='any',
          thresh=None,
          subset=None,
          inplace=False)

参数含义

  • axis:控制操作维度的参数,0 表示按行操作,1 表示按列操作。
  • how:决定删除条件的参数,设置为 any 时,只要行或列中包含任意一个 NaN 即被删除;设置为 all 时,仅当行或列中所有值均为 NaN 时才被删除。
  • thresh:指定非空值的最低数量阈值,只有当非 NaN 值的数量达到该设定值时,该行或列才会被保留(反之,若未达标则被删除)。
  • subset:指定参与判断的数据范围,例如在删除行时,可通过 subset 指定仅参考特定的几列,若未指定则默认检查所有列。
  • inplace:控制是否直接修改原数据,设置为 True 时直接修改原数据框并返回 None,设置为 False 时返回处理后的新数据框而不修改原数据。

设置 axis = 1,表示若某列中包含缺失值,则直接删除该列。


df.dropna(axis=1, how='any')

由于示例中每列都包含缺失值,执行后仅剩索引列。

设置 axis = 0(默认值),表示若某行中包含缺失值,则直接删除该行。


df.dropna(axis=0, how='any')

以 ABC 三列为参照范围,仅当这三列同时为缺失值时才删除该行。


df.dropna(axis=0, subset=['A', 'B', 'C'], how='all')

保留非 NaN 值数量至少为 3 的行。


df.dropna(axis=0, thresh=3)

填补缺失值

另一种常见的缺失值处理策略是使用 fillna() 函数进行填充。


df.fillna(value=None,
          method=None,
          axis=0,
          inplace=False,
          limit=None)

1. 直接指定填充值


df.fillna(666)

2. 使用缺失值前/后的值进行填充

按前一个值填充

当 method 参数设置为 ffill 或 pad 时,系统将按前一个非缺失值进行填充。

当 axis = 0 时,使用缺失值所在列的上一个非缺失值进行填充;若缺失值位于第一行,则不进行填充。

当 axis = 1 时,使用缺失值所在行的上一个非缺失值进行填充;若缺失值位于第一列,则不进行填充。


df.fillna(axis=0, method='pad')

按后一个值填充

当 method 参数设置为 backfill 或 bfill 时,系统将按后一个非缺失值进行填充。

当 axis = 0 时,使用缺失值所在列的下一个非缺失值进行填充;若缺失值位于最后一行,则不进行填充。

当 axis = 1 时,使用缺失值所在行的下一个非缺失值进行填充;若缺失值位于最后一列,则不进行填充。


df.fillna(axis=0, method='bfill')

指定相应的填充方法


df.fillna(df.mean())

利用 limit 参数限制填充的次数。

在 ABCD 各列上,每列仅填充第一个遇到的空值。


df.fillna(value=666, axis=1, limit=1)

以上就是Python数据分析之缺失值检测与处理详解的详细内容,更多关于Python 缺失值检测处理的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。