公众号:尤而小屋
作者: Peter
编辑:Peter
数据清洗真的是一项复杂且繁琐的工作。有人嘲讽:搞数据的,80%的时间花在了数据清洗上。听起来匪夷所思的,但实际情况真的就是如此呀!
但也是整个数据分析过程中最为重要的一环。本篇文章将介绍如何使用Pandas库来处理缺失值。
Pandas文章已经连载12篇,往期精选文章:
1-图解pandas的排序机制
2-图解pandas的排名机制
3-图解pandas的groupby机制
当我们的数据中出现了空值或者缺失值之后,我们经常处理的函数有:判断是否是缺失值、直接删除缺失值、填充缺失值
首先介绍下Pandas或者Python涉及到的几个可能模糊的概念:
其次,我们看看Pandas中None和NaN的关联:
为了进行解释,笔者模拟了一份存在缺失值和空值的数据:
在生日、地址、英语中存在缺失值;在地址中还存在空值:直接按下空格键即可生成
我们将数据读取到notebook的样子为下图:空值没有任何内容,缺失值显示为NaN或者NaT。
两个函数可以查看数据中是否存在缺失值:isnull()、isna()
存在缺失值的位置会用True表示
df.isnull() # 空值的位置标记为True
df.isnull().any() # 只要有一个缺失值及为True
df.isnull().sum() # 每个列属性的缺失值总数
⚠️isna()和isnull()的用法相同:
notnull()和isnull()的用法是完全相反的:
1、查看每个非缺失值的情况,此时缺失值用False表示
2、查看每个列属性的非缺失值个数
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数的具体解释为:
为了解释方便,我们先生成一个副本df1:
默认是axis=0的删除:
除了用axis=0或者axis=1表示之外,还可用axis="index"或者axis=“columns”:
两种方式进行删除:
thresh参数表示的是:thresh=N,当存在至少N个不缺失值的情况下,才会保留数据。
下面的例子中,N=6表示至少要有6个非缺失值才会保留;索引为1的数据存在两个缺失值,索引 被删除了
当我们改成N=7:只要存在缺失值的行都会被删除
subset表示的使用指定通过某个子集元素来进行删除。可以是一个或者多个,多个使用列表形式
删除过缺失值得新数据是存为副本还是直接在原数据上进行修改。
如果不指定inplace,默认是存为副本,生成新的数据帧
如果指定为True,则原数据直接修改:
有时候处理数据的时候,我们可以直接删除缺失值;但有时为了数据的完整性,我们需要对缺失值进行填充:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
item-> dtype
的字典,如果可能的话,将向下转换,或者是字符串“infer”
,将尝试向下转换为适当的相等类型。看下官网解释,用的少downcast:A dict of item->dtype of what to downcast if possible, or the string ‘infer’ which will try to downcast to an appropriate equal type (e.g. float64 to int64 if possible).
再模拟一份数据:
df2 = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list("ABCD"))
df2
参数value是我们需要填充的值,有多种形式:
通过字典的形式进行填充,字典的键是我们的列属性名称:
通过函数计算出来的值进行填充:
axis参数用来表示填充的方向,默认是axis=0
参数limit表示的是缺失值的最多填充个数:下面的例子是最多填充2个
参数method表示的是填充的方式,这个参数不能和value值同时存在
bfill和backfill表示的是用缺失值的后面一个值来进行填充当前缺失值的位置:比如索引为0的缺失值,后面是3,填充即可。
作用效果类似dropna;如果加上inplace=True,则会直接修改原数据。不多介绍,一般我们都是默认用False,不直接修改原数据
为了解释downcast的使用,在Stack Overflow上找到了一个案例:
https://stackoverflow.com/questions/27066412/using-fillna-downcast-and-pandas
数据不可能总是那么的完美,存在缺失值是十分常见的情况。本文从查看缺失值、删除缺失值到缺失值的填充进行详解地介绍,重点掌握dropna和fillna的使用,希望对读者有所帮助。