数据清洗——处理缺失值

咱们最初的数据会由于各类各样的缘由——信息没法获取,被遗漏——而产生缺失值。pandas使用NaN(Not a Number)来表示缺失值。处理缺失值的方式主要有两个——过滤缺失值或补全缺失值。web

下表是处理缺失值的相关函数列表:svg

函数名 描述
dropna 根据每一个标签的值是不是缺失数据来筛选轴标签
fillna 用某些值填充缺失值
isnull 返回代表哪些值是缺失值的布尔值
notnull isnull的反函数

1、过滤缺失值函数

将存在遗漏信息属性值的对象(元组,记录)删除,从而获得一个完备的信息表。显而易见,这种方法会丢弃大量隐藏在这些对象中的信息,因此,在缺失数据占比较大的状况下最好不要用。在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比很是小的状况下很是有效。3d

dropna是过滤缺失值时很是有用的函数。默认状况下会删除包含缺失值的行。code

data = pd.Series([1, np.nan, 3.5, np.nan, 9])
data.dropna()

在这里插入图片描述

data = pd.DataFrame([[1, 4, 5], [2, np.nan, np.nan], 
                     [np.nan, np.nan, np.nan], [np.nan, 5, 6]])
data.dropna()

在这里插入图片描述
传入how='all’时,将删除全部值均为NaN的行:xml

data.dropna(how='all')

在这里插入图片描述
传入axis=1,删除列:对象

data = pd.DataFrame([[1, 4, 5], [2, np.nan, np.nan], 
                     [9, np.nan, np.nan], [9, 5, 6]])
data.dropna(axis=1)

在这里插入图片描述
传入thresh=n,只保留至少有n个非NAN值的行:blog

data = pd.DataFrame([[1, 4, 5], [2, np.nan, np.nan], 
                     [9, np.nan, 8], [9, 5, 6]])
data

在这里插入图片描述

data.dropna(thresh=2)

在这里插入图片描述

data.dropna(thresh=3)

在这里插入图片描述
用subset删除指定列中包含缺失值的行:图片

data.dropna(subset=[2])

在这里插入图片描述

2、补全缺失值pandas

过滤缺失值会形成信息缺失,因此咱们有时会用多种方式补全漏洞,而不是过滤。咱们主要使用fillna方式来补全。

能够用常数补全:

data = pd.DataFrame([[1, 4, 5], 
                     [2, np.nan, np.nan], 
                     [np.nan, np.nan, np.nan], 
                     [np.nan, 5, 6]])
data.fillna(0)

在这里插入图片描述
能够用字典为不一样的列设置不一样的填充值:

data.fillna({0: 5, 1: data[1].mean(), 2: 'love'})

在这里插入图片描述 上面例子中的缺失值都是数值,数值型的缺失值最好用该属性全部对象的平均值来填充,而非数值型的缺失值最好用该属性的全部对象取值最多的值来填充(众数)。