前言

在数据处理的过程中,我们应该都有这样的体会,本质上数据处理与分析是相互协作,彼此成就的过程。比如,我们会用数据分析统计数据集中的缺失值、异常值,更直观的也会进阶到数据可视化的部分(到达该部分一般是成了文章类或汇报类的一部分),然后以统计结果为基础再对数据进行处理。这个过程往往不是一次性过程,是循环往复的。然后数据处理的结果是有质量的,对后期的数据挖掘、机器学习、深度学习以及其他更多的应用,提供了坚实的基础。接下来,我们就一起来梳理和总结一下,数据处理过程中,经常遇到的缺失值处理方法。

小编在本文中主要通过python技术来讲解不同数据需求背景下的数据缺失值处理方法。特别提示一下,我们在学习的过程中,需要有这样的思维,我们是为了处理数据而使用python,不是为了使用python而进行数据处理。我们需要从本质上掌握缺失值处理方法,然后才是python技术在这些场景上有什么样的函数或方法可以更便捷、更简单的解决问题。

缺失值的处理方法,通常分为两种,一是直接将其进行滤除;二是使用固定值或衍生值去填充缺失值,下面进行逐一介绍。



回顾滤除缺失值方法

滤除缺失值数据有两种场景,一种是对Series结构的数据进行滤除,另外则是对DataFrame数据进行滤除。

1.Series结构数据缺失值滤除

关于python技术滤除缺失值的方法,小编在过往的分享中已经进行了介绍。在本文中,我们一起来简单回顾,大家可以加深一下印象。

首先,从numpy中导入缺失值方法,具体代码如下:

#书写方式如下
from numpy import nan as NA

其次,dropna使用方法,具体写法如下:

data.dropna()

另外一种同样能够达到此目的的方式是通过布尔型索引,具体写法如下:

Data[data.notnull()]

2.DataFrame结构数据缺失值滤除

接下来,我们具体来回顾一下,dropna方法是如何DataFrame结构数据的行、列和时间序列数据进行滤除的,不同场景下使用的方法如下所示:

(1)dropna默认丢弃任何含有缺失值的行

书写方式:data.dropna()

(2)传入how=’all’将只丢弃全为NA的那些行

书写方式:data.dropna(how=’all’)

(3)传入axis=1丢弃列

书写方式:data.dropna(how=’all’,axis=1)

(4)thresh参数过滤时间序列数据

书写方式:df.dropna(thresh=3)

上述的不同场景下滤除缺失值的方法,相对比较完整,大家可以在亲自进行尝试和体会。

如何使用固定值或衍生值填充缺失值?

在回顾了缺失值滤除方法后,我们重点来介绍如何使用固定值或衍生值填充缺失值。

在有少量缺失值,但相对完整的数据中,直接滤除缺失值是一种相对粗暴的解决方法。而实际的数据处理过程中,我们经常进行的是使用固定值或衍生值填充缺失值,然后再进行下一步的其他动作。我们使用dropna方法进行缺失值滤除,而缺失值填充使用的则是fillna这个工具。

小编在本文中主要介绍4种填充缺失值的场景及相应的示例,具体如下:

1.用平均值填充NA值


2.对不同分组填充不同的值

假设需要对不同的分组填充不同的值。只需将数据分组,并使用apply和一个能够对各数据块调用fillna的函数即可。


3.用分组平均值去填充NA值


4.在代码中预定义各组的填充值

由于分组具有一个name属性,所以可以用一下:


总结

综上所述,dropna和fillna两种python技术工具,实现了缺失值的滤除和填充。除此之外,本文介绍了9种缺失值处理的应用场景与方法,分别为:Series结构的缺失值滤除、DataFrame结构数据缺失值滤除(4种)、4种使用固定值或衍生值填充缺失值的场景与方法,基本涵盖了数据处理中经常使用的缺失值处理应用场景与方法。