前言
在数据处理的过程中,我们应该都有这样的体会,本质上数据处理与分析是相互协作,彼此成就的过程。比如,我们会用数据分析统计数据集中的缺失值、异常值,更直观的也会进阶到数据可视化的部分(到达该部分一般是成了文章类或汇报类的一部分),然后以统计结果为基础再对数据进行处理。这个过程往往不是一次性过程,是循环往复的。然后数据处理的结果是有质量的,对后期的数据挖掘、机器学习、深度学习以及其他更多的应用,提供了坚实的基础。接下来,我们就一起来梳理和总结一下,数据处理过程中,经常遇到的缺失值处理方法。
小编在本文中主要通过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种使用固定值或衍生值填充缺失值的场景与方法,基本涵盖了数据处理中经常使用的缺失值处理应用场景与方法。
python好书推荐: