持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
注意:本案例使用 Jupyter Notebook 进行案例演示
1. 缺失值处理
- 思路一:样本大,可以删除含有缺失值的样本
- 思路二:数据量小,可以替换/插补
1.1 检测缺失值
通常情况下数据表中的缺失值是由NaN标记的,因此,我们考虑检测出表中是否存在NaN标记,即可判断某表是否含有缺失值。 当然,也存在不是由NaN标记缺失值的情况,这个时候,我们就需要先将非NaN标记的缺失值转化为NaN标记,然后,再使用下面介绍方法对其进行检测。
下面将介绍两种检测NaN缺失值的方法(notnull与isnull):
- 判断数据中是否存在NaN
-
pd.notnull():- 若没有缺失值:返回True
- 若有缺失值:返回false
-
pd.isnull(data1):- 若有缺失值:返回True
- 若没有缺失值:返回false
- 删除含有缺失值的样本
-
df.dropna(inplace=False):
- 默认按行删除,一行就是一个样本
- inplace=True:就地删除
- inplace=False:返回新的DataFrame
- 替换/插补
-
df.fillna(value, inplace=False)
- value:插补的值类型
- inplace:是否就地插补
1.2 案例演示
步骤1:判断是否存在缺失值
导入相关库,然后导入需要的数据,首先进行缺失值检验,判断是否存在缺失值,具体代码如下所示:
方法1:
import 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说明存在缺失值,至少存在一个。
方法2:notnull判断是否存在缺失值
pd.notnull(data_queshi).all()
# 有False的地方说明有缺失值
运行结果如下图所示:有False的地方就说明有缺失值。
方法3:isnull判断缺失值
pd.isnull(data_queshi).any()
# 有True的地方说明存在缺失值
运行结果如下:有True的地方就有缺失值。
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,说明缺失值已经彻底删除完毕了。