从Pandas数据框中删除具有缺失值或NaN的行

从Pandas数据框中删除具有缺失值或NaN的行

在实际的数据处理中,缺失值是比较常见的情况。对于一些统计计算和建模分析,缺失值的存在会造成极大的影响。因此,一般需要对含有缺失值的数据进行处理。具体操作有填充、删除等。本篇文章主要介绍如何从 Pandas 数据框中删除含有缺失值的行。

1. Pandas 数据框简介

Pandas 是 Python 中一个强大的数据处理库,其中最核心的数据结构是 Series 和 DataFrame。其中,DataFrame 类似于电子表格或 SQL 表,可以处理有序的二维表数据,其中每一列可以是一个不同的数据类型(例如字符串、浮点数、整数、布尔值等)。

在 Pandas 中,DataFrame 包含行索引和列索引两个方向上的标签,可以利用这个标签对 DataFrame 进行灵活地切片、过滤、JOIN 等数据操作。

Pandas 的 DataFrame 类型以内存为基础,通常能够轻松处理小型数据集。对于大型数据集,需要考虑其内存占用情况。

2. 生成一个含有缺失值的数据框

我们通过以下代码生成一个含有缺失值的数据框:

import pandas as pd
import numpy as np

data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
        'score1': [80, 90, np.nan, 70],
        'score2': [60, np.nan, 50, 80],
        'score3': [70, 80, 90, 60]}
df = pd.DataFrame(data)
print(df)

输出如下:

       name  score1  score2  score3
0     Alice    80.0    60.0      70
1       Bob    90.0     NaN      80
2   Charlie     NaN    50.0      90
3     David    70.0    80.0      60

其中,np.nan 表示缺失值。

可以看到,这个 DataFrame 中含有缺失值,我们将通过删除行的方式处理这些缺失值。

3. 删除含有缺失值的行

Pandas 提供了删除 DataFrame 中含有缺失值的行的函数:dropna()

df.dropna()

dropna() 函数的默认参数为 axis=0,表示按行为单位进行删除。在本例中,执行后的输出为:

    name  score1  score2  score3
0  Alice    80.0    60.0      70
3  David    70.0    80.0      60

可以看到,包含缺失值的行都被删除了。

dropna() 函数还有其他参数可供调整:

  • how='any':默认值,删除任意一行中含有缺失值的行;
  • how='all':只删除全部行均含有缺失值的行;
  • thresh=k:限定含有缺失值的最大数量,超过 k 个的行将被删除。

示例代码

# 保留所有列均不含缺失值的行
df.dropna(how='all')
# 限制含有缺失值的最大数量为 1
df.dropna(thresh=3)

4. 结合 subset 参数删除含有特定列缺失值的行

有些时候,我们只需要删除含有某些特定列缺失值的行。此时,我们可以通过结合 subset 参数用于指定某个列的方式实现。

示例代码

# 删除 score1 列中有缺失值的行
df.dropna(subset=['score1'])

输出如下:

      name  score1  score2  score3
0    Alice    80.0    60.0      70
1      Bob    90.0     NaN      80
3    David    70.0    80.0      60

可以看到,含有缺失值的行中,仅含有缺失值的列为 score1。通过结合 subset=['score1'] 参数,我们就成功地删除了这个具有缺失值的行。

5. 使用 inplace 参数原地删除

最后,我们介绍一下 inplace 参数。

inplace 参数为布尔类型,表示是否在原 DataFrame 上直接删除缺失值所在的行,而不是返回一个新的 DataFrame。

示例代码

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

输出如下:

      name  score1  score2  score3
0    Alice    80.0    60.0      70
3    David    70.0    80.0      60

可以看到,执行 inplace=True 参数后,原 DataFrame 已经发生了改变,只保留了不含有缺失值的行,即只剩下两行了。

结论

本篇文章主要介绍了 Pandas 中删除缺失值所在行的方法。通过 dropna() 函数及其参数的配置,我们可以方便地根据需求对 DataFrame 中的数据进行加工处理。值得一提的是,虽然 dropna() 函数是删除缺失值的强力工具,但过度删除缺失值也会造成数据的损失和偏差。在具体操作中,需要根据数据量大小、分析目的等多个因素,综合考虑再做决策。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程