pandas如何处理缺失值


Posted in Python onJuly 31, 2019

在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

一、缺失值的判断

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

a、Series的缺失值判断

s = Series(["a","b",np.nan,"c",None])
  print(s)
  '''
  0    a
  1    b
  2   NaN
  3    c
  4  None
  '''
  #判断缺失值,如果是则返回True,否则返回False
  print(s.isnull())
  '''
  0  False
  1  False
  2   True
  3  False
  4   True
  '''
  #输出缺失值的索引和值
  print(s[s.isnull()])
  '''
  2   NaN
  4  None
  '''

b、DataFrame的缺失值判断

a = [[1,np.nan,2],[3,4,None]]
  data = DataFrame(a)
  #DataFrame的None值变成了NaN
  print(data)
  '''
    0  1  2
  0 1 NaN 2.0
  1 3 4.0 NaN
  '''
  print(data.isnull())
  '''
      0   1   2
  0 False  True False
  1 False False  True
  '''
  print(data[data.isnull()])
  '''
    0  1  2
  0 NaN NaN NaN
  1 NaN NaN NaN
  '''

注意:在使用Series和DataFrame的时候,如果其中有值为None,Series会输出None,而DataFrame会输出NaN,但是对空值判断没有影响。DataFrame使用isnull方法在输出空值的时候全为NaN,因为DataFrame对于False对应的位置,输出值会使用NaN代替,而Series对于Fasel对应的位置是没有输出值的。

二、过滤缺失数据

a、Series的缺失值过滤

s = Series(["a","b",np.nan,"c",None])
  #通过使用notnull方法来获取非缺失数据
  print(s[s.notnull()])
  '''
  0  a
  1  b
  3  c
  '''
  #使用dropna方法删除缺失数据,返回一个删除后的Series
  print(s.dropna())
  '''
  0  a
  1  b
  3  c
  '''
  #并没有在原来的Series上进行直接删除
  print(s)
  '''
  0    a
  1    b
  2   NaN
  3    c
  4  None
  '''
  #通过设置inplace参数为True,在原Series上进行删除,不会返回Series
  print(s.dropna(inplace=True))
  #None
  print(s)
  '''
  0  a
  1  b
  3  c
  '''

b、DataFrame的缺失值过滤

DataFrame删除缺失值相对于Series而言就要复杂一些,也许有的时候你是想删除含有缺失值的行或列,也许有时候你需要删除的是,当整行或整列全为缺失值的时候才删除,好在pandas对于这两种情况都有相对应的处理方法。

1、删除含有缺失值的行和列

a = [[1, np.nan, 2],[9,None,np.nan],[3, 4, None],[5,6,7]]
  data = DataFrame(a)
  print(data)
  '''
    0  1  2
  0 1 NaN 2.0
  1 9 NaN NaN
  2 3 4.0 NaN
  3 5 6.0 7.0 
  '''
  #使用dropna方法删除含有缺失值的行,默认是行
  print(data.dropna())
  '''
    0  1  2
  3 5 6.0 7.0
  '''
  #删除含有缺失值的列
  print(data.dropna(axis=1))
  '''
    0
  0 1
  1 9
  2 3
  3 5
  '''

2、删除全为NaN的行和列

a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
     0  1  2
  0 1.0 NaN 2.0
  1 NaN NaN NaN
  2 3.0 NaN NaN
  3 5.0 NaN 7.0
  '''
  #当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除
  print(data.dropna(how="all"))
  '''
     0  1  2
  0 1.0 NaN 2.0
  2 3.0 NaN NaN
  3 5.0 NaN 7.0
  '''
  #当列全为NaN的时候,才删除
  print(data.dropna(how="all",axis=1))
  '''
     0  2
  0 1.0 2.0
  1 NaN NaN
  2 3.0 NaN
  3 5.0 7.0
  '''

dropna方法的inplace的设置与Series一样。

3、指定删除数据后显示部分数据观察

a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
     0  1  2
  0 1.0 NaN 2.0
  1 NaN NaN NaN
  2 3.0 NaN NaN
  3 5.0 NaN 7.0
  '''
  #当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除
  print(data.dropna(how="all"))
  '''
     0  1  2
  0 1.0 NaN 2.0
  2 3.0 NaN NaN
  3 5.0 NaN 7.0
  '''
  #通过thresh参数来控制显示删除数据的条数,删除列的时候thresh参数无效
  print(data.dropna(how="all",thresh=2))
  '''
     0  1  2
  0 1.0 NaN 2.0
  3 5.0 NaN 7.0
  '''

三、填充缺失值

数据都是宝贵的,也许有时候你的数据不够多,因为数据越多对于模型的训练,数据分析都是有好处的,所以很多的时候我们都不想删除数据。通常情况下,也许你会选择用一些特殊值来填充缺失值。下面介绍使用pandas的fillna方法来填充缺失数据。

1、指定特殊值填充缺失值

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 NaN 6.0
  2 3 7.0 NaN
  3 5 NaN 7.0
  '''
  #用0填充所有的缺失数据
  print(data.fillna(0))
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 0.0 6.0
  2 3 7.0 0.0
  3 5 0.0 7.0
  '''

2、不同列使用不同的填充值

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 NaN 6.0
  2 3 7.0 NaN
  3 5 NaN 7.0
  '''
  print(data.fillna({1:1,2:2}))
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 1.0 6.0
  2 3 7.0 2.0
  3 5 1.0 7.0
  '''

3、前向填充和后向填充

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 NaN 6.0
  2 3 7.0 NaN
  3 5 NaN 7.0
  '''
  #前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充
  print(data.fillna(method="ffill"))
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 2.0 6.0
  2 3 7.0 6.0
  3 5 7.0 7.0
  '''
  #后向填充,使用下一行的值,不存在的时候就不填充
  print(data.fillna(method="bfill"))
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 7.0 6.0
  2 3 7.0 7.0
  3 5 NaN 7.0
  '''

4、使用列的平均值进行填充

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
  data = DataFrame(a)
  print(data)
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 NaN 6.0
  2 3 7.0 NaN
  3 5 NaN 7.0
  '''
  print(data.fillna(data.mean()))
  '''
    0  1  2
  0 1 2.0 2.0
  1 3 4.5 6.0
  2 3 7.0 5.0
  3 5 4.5 7.0
  '''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
简洁的十分钟Python入门教程
Apr 03 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
python实现自动重启本程序的方法
Jul 09 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
python3实现随机数
Jun 25 Python
python解析yaml文件过程详解
Aug 30 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 #Python
使用pandas读取文件的实现
Jul 31 #Python
python3实现mysql导出excel的方法
Jul 31 #Python
Django接收post前端返回的json格式数据代码实现
Jul 31 #Python
python快速编写单行注释多行注释的方法
Jul 31 #Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 #Python
利用Python检测URL状态
Jul 31 #Python
You might like
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python中subprocess的简单使用示例
2015/07/28 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
python之列表推导式的用法
2019/11/29 Python
python获取整个网页源码的方法
2020/08/03 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
罚款通知怎么写
2015/04/22 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android