首页 文章详情

Python数据分析之缺失值处理

数据森麟 | 298 2021-01-26 14:25 0 0 0
UniSMS (合一短信)


公众号后台回复“图书“,了解更多号主新书内容

作者:严小样儿

来源:统计与数据分析实战


前言


数据缺失值的处理,在数据分析前期,即数据处理过程中占着重要的地位,在数据分析面试中被问到的概率也是极大的。

一般情况下,我们对待缺失值有三种处理方式:
(1)源数据补录,即通过再次采样或者询问等方式将缺失内容补充完整;
(2)缺失值填充,即根据一定的规则将缺失值填充,可选众数、中位数等;
(3)删除缺失值,即根据一定的规则将含有缺失值的行或列直接进行删除。

我的会员请教了我关于缺失值的问题,于是我为他整理了一篇详细的文章,讲解一下如何进行缺失值处理。今天这篇文章只是缺失值处理的第一节——缺失值的删除


dropna


dropna为pandas库下DataFrame的一个方法,用于删除缺失值。基本参数如下:

dropna(self, axis=0, how='any', subset=None, inplace=False)

接下来,我们一一进行讲解。


# 预览模拟数据>>> dfOut[1]:     name   age   birthday  gender0   Alan  17.0 1999-01-25    male1          NaN        NaT  female2  Black  18.0 1997-02-07    male3   Cici   NaN 2000-01-18  female4  David  25.0        NaT    male5    NaN  22.0        NaT  female
# 不加任何参数>>> df.dropna()Out[2]:  name age birthday gender0 Alan 17.0 1999-01-25 male2  Black  18.0 1997-02-07   male
>>> df.dropna(how = 'any')Out[3]:  name age birthday gender0 Alan 17.0 1999-01-25 male2 Black 18.0 1997-02-07 male


通过上面的代码可以看出,在不加任何参数,即默认值情况下,会把所有包含缺失值的行统统删除

# all——删除整行均为缺失值的行>>> df.dropna(how = 'all')Out[4]:     name   age   birthday  gender0   Alan  17.0 1999-01-25    male1          NaN        NaT  female2  Black  18.0 1997-02-07    male3   Cici   NaN 2000-01-18  female4  David  25.0        NaT    male5    NaN  22.0        NaT  female
>>> df.iloc[:,1:3].dropna(how = 'all')Out[5]: age birthday0 17.0 1999-01-252 18.0 1997-02-073 NaN 2000-01-184 25.0 NaT5 22.0 NaT
# 按列删除——即包含缺失值的列统统被删除>>> df.dropna(axis = 1)Out[6]: gender0 male1 female2 male3 female4 male5 female
# 删除指定列包含缺失值的行>>> df.dropna(subset = ['name','gender'])Out[7]: name age birthday gender0 Alan 17.0 1999-01-25 male1 NaN NaT female2 Black 18.0 1997-02-07 male3 Cici NaN 2000-01-18 female4 David 25.0 NaT male

当然了,以上所有的操作均不是对元数据产生作用,只是生成了一个副本。如果想要对元数据产生作用,则必须加一个inplace参数。


# 再次查看元数据,观察是否变化>>> dfOut[8]:     name   age   birthday  gender0   Alan  17.0 1999-01-25    male1          NaN        NaT  female2  Black  18.0 1997-02-07    male3   Cici   NaN 2000-01-18  female4  David  25.0        NaT    male5    NaN  22.0        NaT  female
# 加入inplace参数,对元数据产生影响>>> df.dropna(inplace = True)
>>> dfOut[9]:  name age birthday gender0 Alan 17.0 1999-01-25 male2 Black 18.0 1997-02-07 male


◆ ◆ ◆  ◆ 

麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:






数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:

猜你喜欢

 卧槽!原来爬取B站弹幕这么简单

 厉害了!麟哥新书登顶京东销量排行榜!

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 你相信逛B站也能学编程吗

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter