01_缺失值处理
学习目标
- 知道什么是缺失值,为什么会产生缺失值
- 熟练掌握缺失值处理的方式
1.1 pandas 缺失值 NaN 简介
在实际进行数据处理的过程中,很多数据集都含缺失数据。
缺失数据有多重表现形式:
1)数据库中,缺失数据表示为NULL
2)在某些编程语言中用NA
或None
表示
3)缺失值也可能是空字符串''
或数值 0
4)在 pandas 中使用 NaN
表示缺失值
-
pandas 中的 NaN 值来自 NumPy 库
-
NumPy 中缺失值有几种表示形式:NaN,NAN,nan,他们都一样
import numpy as np print(np.NaN) print(np.NAN) print(np.nan)
注意点1:缺失值和其它类型的数据不同,它毫无意义,NaN不等于0,也不等于空字符串
print(np.NaN==True)
print(np.NaN==False)
print(np.NaN==0)
print(np.NaN=='')
print(np.NaN==None)
注意点2:两个NaN也不相等
print(np.NaN==np.NaN)
print(np.NaN==np.nan)
print(np.NaN==np.NAN)
print(np.NAN==np.nan)
pandas 判断是否为缺失值方法:
方法 | 说明 |
---|---|
pd.isnull(obj) 或 pd.isna(obj) |
判断 obj 是否为缺失值 |
pd.notnull(obj) 或 pd.notna(obj) |
判断 obj 不为缺失值 |
print(pd.isnull(np.NaN))
print(pd.isnull(np.nan))
print(pd.isnull(np.NAN))
print(pd.notnull(np.NaN))
print(pd.notnull(42))
判断 Series 中的元素是否是缺失值:
方法 | 说明 |
---|---|
series.isnull() |
判断 Series 中的每个元素是否为缺失值,返回一个 bool 序列的 Series 数据 |
# 创建一个包含缺失值的 Series 数据
series = pd.Series([1, 3, np.NaN, 2, np.NaN, 5])
series
# 判断 Series 中的元素是否为 NaN 值
series.isnull()
# 计算 Series 中 NaN 值的数量
series.isnull().sum()
判断 DataFrame 中的数据是否是缺失值:
方法 | 说明 |
---|---|
df.isnull() |
判断 DataFrame 中的每个元素是否为缺失值,返回一个 bool 序列的 DataFrame 数据 |
# 创建一个包含缺失值的 DataFrame 数据
df = pd.DataFrame([
[1, np.NaN, 3],
[np.NaN, 2, 1],
[np.NaN, 3, np.NaN]
], columns=['A', 'B', 'C'])
df
# 判断 DataFrame 中的每个元素是否为缺失值
df.isnull()
# 计算 DataFrame 中每一列的缺失值数量
df.isnull().sum()
1.2 加载包含缺失值的数据
缺失值从何而来呢?缺失值的来源有两个:
1)原始数据包含缺失值
2)数据整理过程中产生缺失值
加载包含缺失值的数据:
1)使用 pandas 加载 survey_visited.csv
数据
# 加载包含缺失值的数据
pd.read_csv('./data/survey_visited.csv')
2)pandas 加载数据时,可以设置keep_default_na=False
参数,不显示默认缺失值
# 加载数据时,不显示默认的缺失值,默认缺失值填充为''
pd.read_csv('./data/survey_visited.csv', keep_default_na=False)
3)pandas 加载数据时,也可以设置 na_values
参数,指定加载数据时把什么当做缺失值
# na_values=["DR-3"]:加载数据时,把 'DR-3' 当做缺失值
pd.read_csv('./data/survey_visited.csv', na_values=["DR-3"], keep_default_na=False)
注意:在做数据合并的时候,比如
merge
、join
等操作时,也可能会产生缺失值,参数用法一致,这里不再赘述
1.3 缺失值处理
1.3.1 加载数据并查看缺失情况
注:本案例使用泰坦尼克生存预测数据
titanic_train.csv
,其中Survived字段,代表该名乘客是否获救
1) 加载数据集
(1)加载 titanic_train.csv
数据集
# 加载数据
train = pd.read_csv('./data/titanic_train.csv')
pirnt(train.shape)
trai