从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()
函数是删除缺失值的强力工具,但过度删除缺失值也会造成数据的损失和偏差。在具体操作中,需要根据数据量大小、分析目的等多个因素,综合考虑再做决策。