【Python系列专栏】第六十二篇 Python中 Pandas 缺失值处理

本文介绍了处理数据中缺失值的常见方法,包括删除法、替补法和插补法。删除法分为删除列和删除行,替补法涉及使用均值、中位数或众数填充,而插补法可通过预测模型进行填充。示例展示了如何使用Pandas库进行操作,如fillna()函数的使用,以及不同填充策略的应用。强调了在实际操作中选择合适的填充方式以保持数据的合理性的重要性。
摘要由CSDN通过智能技术生成

缺失值处理

现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法、填补法和插值法

删除法

当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量(删除列)当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测(删除行)

替补法

对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测

插补法

插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值


我们这里就介绍简单的删除法和替补法:

g18

这是一组含有缺失值的序列,我们可以结合sum函数和isnull函数来检测数据中含有多少缺失值

In [130]: sum(pd.isnull(s))
Out[130]: 9
直接删除缺失值

g19

默认情况下,dropna会删除任何含有缺失值的行,我们再构造一个数据框试试:

返回结果表明,数据中只要含有缺失值NaN,该数据行就会被删除,如果使用参数 how='all',则表明只删除所有行为缺失值的观测。

g20

补充一个对比例子:

>>> df  = pd.DataFrame({'x1':[0,1,None,3,None],'x2':[None,1,None,None,4],'x3':[0,None,None,3,4]})
>>> df
    x1   x2   x3
0  0.0  NaN  0.0
1  1.0  1.0  NaN
2  NaN  NaN  NaN
3  3.0  NaN  3.0
4  NaN  4.0  4.0

>>> df.dropna(how='all') # 只有全部列都为NaN的行被删掉
    x1   x2   x3
0  0.0  NaN  0.0
1  1.0  1.0  NaN
3  3.0  NaN  3.0
4  NaN  4.0  4.0

>>> df.dropna() # 只要有一列包含NaN就会删除掉
Empty DataFrame
Columns: [x1, x2, x3]
Index: []

再补充一下,如果是想删除列,直接用 DataFrame.drop(['列名1','列名2'], axis=1) 这个语句就可以了。

再补充一下,被别人问问题的时候发现了一个新手容易犯的错误,在初始化时,如果某一个值为空,也即想初始化为NaN,注意不是填’NaN’,这样初始化的话,数据框中对应的元素就是一个字符串而不是空值,自然也就没法使用pandas库提供的缺失值处理函数了,正确的方法是初始化为None。

使用一个常量来填补缺失值

可以使用fillna函数实现简单的填补工作:

1)用0填补所有缺失值

g21

2)采用前项填充或后向填充

g22

补充,使用这种填充方法,如果第一行/最后一行出现缺失值,它们将不被填充。

3)使用常量填充不同的列

g23

4)用均值或中位数填充各自的列

g24

很显然,在使用填充法时,相对于常数填充或前项、后项填充,使用各列的众数、均值或中位数填充要更加合理一点,这也是工作中常用的一个快捷手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrrunsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值