【数据处理】Pandas库:缺失值检验与删除

1,202 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

注意:本案例使用 Jupyter Notebook 进行案例演示

1. 缺失值处理

  • 思路一:样本大,可以删除含有缺失值的样本
  • 思路二:数据量小,可以替换/插补

1.1 检测缺失值

通常情况下数据表中的缺失值是由NaN标记的,因此,我们考虑检测出表中是否存在NaN标记,即可判断某表是否含有缺失值。 当然,也存在不是由NaN标记缺失值的情况,这个时候,我们就需要先将非NaN标记的缺失值转化为NaN标记,然后,再使用下面介绍方法对其进行检测。

下面将介绍两种检测NaN缺失值的方法(notnull与isnull):

  1. 判断数据中是否存在NaN
  • pd.notnull()

    • 若没有缺失值:返回True
    • 若有缺失值:返回false
  • pd.isnull(data1)

    • 若有缺失值:返回True
    • 若没有缺失值:返回false
  1. 删除含有缺失值的样本
  • df.dropna(inplace=False):

    • 默认按行删除,一行就是一个样本
    • inplace=True:就地删除
    • inplace=False:返回新的DataFrame
  1. 替换/插补
  • df.fillna(value, inplace=False)

    • value:插补的值类型
    • inplace:是否就地插补

1.2 案例演示

步骤1:判断是否存在缺失值

导入相关库,然后导入需要的数据,首先进行缺失值检验,判断是否存在缺失值,具体代码如下所示:

方法1import numpy as np
import matplotlib.pyplot as plt
data_queshi = pd.read_csv("data/data140190/缺失值人口.csv")
# 1. 判断是否存在缺失值
np.all(pd.notnull(data_queshi)) # 返回的是true说明里面没有缺失值,若返回false则有缺失值
# all:只要有一个False就返回False,就说明数据中存在缺失值

运行结果如下图所示:notnull判断出现False说明存在缺失值,至少存在一个。

image.png

方法2:notnull判断是否存在缺失值

pd.notnull(data_queshi).all()
# 有False的地方说明有缺失值

运行结果如下图所示:有False的地方就说明有缺失值。

image.png

方法3:isnull判断缺失值

pd.isnull(data_queshi).any()
# 有True的地方说明存在缺失值

运行结果如下:有True的地方就有缺失值。

image.png

1.3 删除缺失值

删除含有缺失值的样本:

df.dropna(inplace=False):

  • 默认按行删除,一行就是一个样本
  • inplace=True:就地删除
  • inplace=False:返回新的DataFrame

步骤2:删除缺失值

使用如下方法删除缺失值,然后再进行一次检验。

# 2. 缺失值处理
## 2.1 方法1:删除含有缺失值的样本
data_wanzheng = data_queshi.dropna()
np.all(pd.notnull(data_wanzheng)) # 如果有一个缺失值,那么会返回False,说明有缺失值

运行结果如下图:删除完缺失值,再用notnull检测一遍,结果是True,说明缺失值已经彻底删除完毕了。

image.png