数据清洗:pandas缺失值处理

缺失数据在大部分数据分析应用中都很常见,数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。Python中的pandas库提供了对缺失数据的处理,pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据,便于监测。

1.查看数据是否存在缺失值
  • 当数量少的时候,可以直接观察看是否存在缺失。
import pandas as pd
import numpy as np
data=pd.read_csv('data\Missing.csv',encoding='gb2312')
data

在这里插入图片描述

  • 当数据量大的时候,可以用describe()或isnull()函数来判断是否存在缺失。通过describe()的结果可以看出,规模以上工业企业增加值(亿元)、城镇人口比重(%)、总人口数(万人)3列的count值分别为12、15、15条数据,为缺失部分值;而城镇人口数的count为0,表示整个字段缺失。根据isnull()函数的结果同样可以看出,缺失值处为True,非缺失值处为False。
    在这里插入图片描述
    在这里插入图片描述
2.缺失值的处理

缺失值产生有多种原因。有些因暂时无法获取或者获取代价太大而导致缺失。有些可能是因为输入时认为不重要、忘记填写或对数据理解错误等一些人为因素而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体故障等非人为原因而丢失。有些属性值不存在,如一个未婚者的配偶姓名、一个儿童的固定收入等,这种缺失值并不意味着数据有错误。所以要根据缺失值产生的原因选择适当的处理方式,缺失值的处理方式主要有删除、填充、不处理。

(1)删除缺失值

DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

  • axis:0 or ‘index’表示按行删除;1 or ‘columns’表示按列删除,默认为0。
  • how:‘any’表示该行/列至少有一个空值就删除该行/列;‘all’表示该行/列全部为空值就删除该行/列,默认为 ‘any’。
  • thresh:int型,表示如果该行/列的非空元素数量小于这个值,就删除该行/列,默认为None。
  • subset:行/列的索引列表,表示子集。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,删除该区域内存在缺失的行/列。
  • inplace:布尔值,表示是否替换。如果为True,则在原DataFrame上进行操作,返回值为None,默认为False。
    在这里插入图片描述
    在这里插入图片描述
(2)填充缺失值

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

  • value:用于填充缺失值的标量值或字典、元组对象;
  • method:插值方式,可选项为‘backfill’、‘bfill’、 ‘pad’、‘ffill’、None,默认为“ffill”。
  • axis:0 or ‘index’表示按行填充;1 or ‘columns’表示按列填充,默认为0。
  • inplace:布尔值,表示是否替换。如果为True,则在原DataFrame上进行操作,返回值为None,默认为False。
  • limit:(对于前向和后向填充)可以连续填充的最大数量。
  • downcast:dict,默认为None。

(a)设置value参数:以标量值或字典填充缺失值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(b)设置method参数:‘pad’、‘ffill’用前一个非缺失值填充该缺失值,‘backfill’、‘bfill’用下一个非缺失值去填充该缺失值。
注意,如果前一个或者下一个没有值,则无法填充缺失值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结合实际情况,对示例数据中的缺失值做如下处理:

  • “城镇人口数”整列缺失,并且可以根据“总人口数(万人)”、“城镇人口比重(%)”两列计算所得,采用删除;
  • “规模以上工业企业增加值(亿元)” “城镇人口比重(%)” “总人口数(万人)”三列根据历史数据可得,随时间推移有增长趋势,故考虑到缺失值可能最接近上一个年份的数据,采用‘backfill’、‘bfill’方式填充该缺失值。
    在这里插入图片描述
    附:完整代码和数据可通过以下链接自行下载。
    链接:https://pan.baidu.com/s/1bHoczWdBzwU5oKSvq1-pYw
    提取码:7ozq

ps:初衷是通过撰写博文记录自己所学所用,实现知识的梳理与积累;将其分享,希望能够帮到面临同样困惑的小伙伴儿。如发现博文中存在问题,欢迎随时交流~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值