pandas中df.dropna()删除缺失值的参数详解与实战

山海之间
山海之间
发布时间:2026-10-11| 3人浏览过
原创

本文详解pandas中df.dropna()函数的使用,涵盖Series和DataFrame的缺失值删除。重点解析axis、how、thresh、subset和inplace等关键参数,通过具体代码示例展示如何灵活处理不同场景下的NaN数据,帮助开发者高效清理数据。

核心参数解析

在pandas中,dropna()是处理缺失值(NaN)的核心方法。其完整签名如下:

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

理解各参数对结果的影响是正确使用该函数的关键:

  • axis:指定删除维度。0表示按行删除(默认),1表示按列删除。
  • how:指定删除条件。'any'表示只要存在NaN即删除(默认);'all'表示仅当所有值均为NaN时才删除。
  • thresh:设定非NaN值的最小数量。若某行(或列)非NaN值少于该整数,则被删除。
  • subset:指定参与判断的列标签列表。仅检查这些列中的缺失值,其他列即使有NaN也不影响删除决策。
  • inplace:布尔值。为True时直接修改原数据,不返回新对象;为False时返回删除后的新DataFrame。

Series对象处理

对于一维Series对象,dropna()可直接滤除缺失数据。此外,也可利用布尔索引配合notnull()实现相同效果。

import pandas as pd
import numpy as np
from numpy import nan as NaN

# 创建包含NaN的Series
se1 = pd.Series([4, NaN, 8, NaN, 5])
print(se1)

# 方法一:直接使用dropna
se1.dropna()

# 方法二:使用布尔序列过滤
se1[se1.notnull()]

上述两种方法均会返回仅包含非NaN值的Series,索引保持原始顺序。

DataFrame对象处理

处理二维DataFrame时,需根据业务需求选择删除策略。默认情况下,dropna()会删除任何包含NaN值的行。

基础删除示例

假设有一个包含不同缺失情况的DataFrame:

df = pd.DataFrame({
    "name": ['Alfred', 'Batman', 'Catwoman'],
    "toy": [np.nan, 'Batmobile', 'Bullwhip'],
    "born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]
})
print(df)

执行df.dropna()后,由于第0行和第2行的born列为NaT(Not a Time,时间序列中的NaN),第0行的toy列为NaN,只有第1行完全无缺失值,因此结果仅保留第1行。

按列删除(axis=1)

若需删除包含缺失值的列,可设置axis=1:

df.dropna(axis=1)

此时,只要某列中存在NaN,该列就会被移除。上例中toy列和born列均含缺失值,故仅保留name列。

精确控制删除条件

通过组合how和thresh参数,可实现更精细的控制:

  • how='all':仅删除全为NaN的行。上例中第0行和第2行并非全为NaN,故均被保留。
  • thresh=n:保留至少有n个非NaN值的行。例如thresh=2时,第2行有2个非NaN值(name和toy),被保留;第0行仅1个非NaN值,被删除。
# 仅删除全为NaN的行
df.dropna(how='all')

# 保留至少有2个非NaN值的行
df.dropna(thresh=2)

指定列检查(subset)

当只需关注特定列的缺失情况,而忽略其他列的缺失时,使用subset参数:

# 仅检查'name'和'born'列的缺失值
df.dropna(subset=['name', 'born'])

上例中,第0行在born列有NaT,第2行在born列也有NaT,因此这两行均被删除,即使第0行的toy列有值。

原地修改(inplace)

若希望直接修改原始DataFrame以节省内存,可设置inplace=True:

df.dropna(inplace=True)
print(df)

执行后,df对象本身被修改,不再包含缺失行。

综合应用示例

以下代码展示了处理包含多种缺失情况的DataFrame的完整流程:

import pandas as pd
import numpy as np

# 创建示例数据
df1 = pd.DataFrame([
    [1, 2, 3],
    [np.nan, np.nan, 2],
    [np.nan, np.nan, np.nan],
    [8, 8, np.nan]
])

# 1. 默认删除:移除任何含NaN的行
print(df1.dropna())

# 2. 仅删除全为NaN的行
print(df1.dropna(how='all'))

# 3. 添加一列全为NaN的数据
df1[3] = np.nan

# 4. 删除包含NaN的列(axis=1)且仅当全为NaN时
df1.dropna(axis=1, how='all')

# 5. 保留至少有1个非NaN值的行
print(df1.dropna(thresh=1))

# 6. 保留至少有3个非NaN值的行
print(df1.dropna(thresh=3))

通过灵活组合这些参数,可以应对数据清洗中的各种缺失值处理需求。

以上就是pandas中df.dropna()删除缺失值的详细内容,更多关于pandas数据清洗的资料请关注本站其它相关文章!

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

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 算法库。