前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
前言
数据缺失值的处理,在数据分析前期,即数据处理过程中占着重要的地位,在数据分析面试中被问到的概率也是极大的。
一般情况下,我们对待缺失值有三种处理方式:
(1)源数据补录,即通过再次采样或者询问等方式将缺失内容补充完整;
(2)缺失值填充,即根据一定的规则将缺失值填充,可选众数、中位数等;
(3)删除缺失值,即根据一定的规则将含有缺失值的行或列直接进行删除。
我的会员请教了我关于缺失值的问题,于是我为他整理了一篇详细的文章,讲解一下如何进行缺失值处理。今天这篇文章只是缺失值处理的第一节——缺失值的删除。
dropna
dropna为pandas库下DataFrame的一个方法,用于删除缺失值。基本参数如下:
dropna(self, axis=0, how='any', subset=None, inplace=False)
接下来,我们一一进行讲解。
# 预览模拟数据
>>> df
Out[1]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
1 NaN NaT female
2 Black 18.0 1997-02-07 male
3 Cici NaN 2000-01-18 female
4 David 25.0 NaT male
5 NaN 22.0 NaT female
# 不加任何参数
>>> df.dropna()
Out[2]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
2 Black 18.0 1997-02-07 male
>>> df.dropna(how = 'any')
Out[3]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
2 Black 18.0 1997-02-07 male
通过上面的代码可以看出,在不加任何参数,即默认值情况下,会把所有包含缺失值的行统统删除。
# all——删除整行均为缺失值的行
>>> df.dropna(how = 'all')
Out[4]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
1 NaN NaT female
2 Black 18.0 1997-02-07 male
3 Cici NaN 2000-01-18 female
4 David 25.0 NaT male
5 NaN 22.0 NaT female
>>> df.iloc[:,1:3].dropna(how = 'all')
Out[5]:
age birthday
0 17.0 1999-01-25
2 18.0 1997-02-07
3 NaN 2000-01-18
4 25.0 NaT
5 22.0 NaT
# 按列删除——即包含缺失值的列统统被删除
>>> df.dropna(axis = 1)
Out[6]:
gender
0 male
1 female
2 male
3 female
4 male
5 female
# 删除指定列包含缺失值的行
>>> df.dropna(subset = ['name','gender'])
Out[7]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
1 NaN NaT female
2 Black 18.0 1997-02-07 male
3 Cici NaN 2000-01-18 female
4 David 25.0 NaT male
当然了,以上所有的操作均不是对元数据产生作用,只是生成了一个副本。如果想要对元数据产生作用,则必须加一个inplace参数。
# 再次查看元数据,观察是否变化
>>> df
Out[8]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
1 NaN NaT female
2 Black 18.0 1997-02-07 male
3 Cici NaN 2000-01-18 female
4 David 25.0 NaT male
5 NaN 22.0 NaT female
# 加入inplace参数,对元数据产生影响
>>> df.dropna(inplace = True)
>>> df
Out[9]:
name age birthday gender
0 Alan 17.0 1999-01-25 male
2 Black 18.0 1997-02-07 male