ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据清洗:pandas缺失值处理

2021-04-13 09:32:56  阅读:250  来源: 互联网

标签:None 删除 填充 默认 缺失 清洗 pandas axis


缺失数据在大部分数据分析应用中都很常见,数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。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:初衷是通过撰写博文记录自己所学所用,实现知识的梳理与积累;将其分享,希望能够帮到面临同样困惑的小伙伴儿。如发现博文中存在问题,欢迎随时交流~~

标签:None,删除,填充,默认,缺失,清洗,pandas,axis
来源: https://blog.csdn.net/ziyin_2013/article/details/114981242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有