Python Pandas对缺失值的处理方法


Posted in Python onSeptember 27, 2019

Pandas使用这些函数处理缺失值:

  • isnull和notnull:检测是否是空值,可用于df和series
  • dropna:丢弃、删除缺失值
    • axis : 删除行还是列,{0 or ‘index', 1 or ‘columns'}, default 0
    • how : 如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
    • inplace : 如果为True则修改当前df,否则返回新的df
  • fillna:填充空值
    • value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
    • method : 等于ffill使用前一个不为空的值填充forword fill;等于bfill使用后一个不为空的值填充backword fill
    • axis : 按行还是列填充,{0 or ‘index', 1 or ‘columns'}
    • inplace : 如果为True则修改当前df,否则返回新的df
import pandas as pd

实例:特殊Excel的读取、清洗、处理

步骤1:读取excel的时候,忽略前几个空行

studf = pd.read_excel("./datas/student_excel/student_excel.xlsx", skiprows=2)
studf

Unnamed: 0 姓名 科目 分数
0 NaN 小明 语文 85.0
1 NaN NaN 数学 80.0
2 NaN NaN 英语 90.0
3 NaN NaN NaN NaN
4 NaN 小王 语文 85.0
5 NaN NaN 数学 NaN
6 NaN NaN 英语 90.0
7 NaN NaN NaN NaN
8 NaN 小刚 语文 85.0
9 NaN NaN 数学 80.0
10 NaN NaN 英语 90.0

步骤2:检测空值

studf.isnull()

Unnamed: 0 姓名 科目 分数
0 True False False False
1 True True False False
2 True True False False
3 True True True True
4 True False False False
5 True True False True
6 True True False False
7 True True True True
8 True False False False
9 True True False False
10 True True False False
studf["分数"].isnull()
0 False
1 False
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 False
10 False
Name: 分数, dtype: bool
studf["分数"].notnull()
0 True
1 True
2 True
3 False
4 True
5 False
6 True
7 False
8 True
9 True
10 True
Name: 分数, dtype: bool
# 筛选没有空分数的所有行
studf.loc[studf["分数"].notnull(), :]

Unnamed: 0 姓名 科目 分数
0 NaN 小明 语文 85.0
1 NaN NaN 数学 80.0
2 NaN NaN 英语 90.0
4 NaN 小王 语文 85.0
6 NaN NaN 英语 90.0
8 NaN 小刚 语文 85.0
9 NaN NaN 数学 80.0
10 NaN NaN 英语 90.0

步骤3:删除掉全是空值的列

studf.dropna(axis="columns", how='all', inplace=True)
studf

姓名 科目 分数
0 小明 语文 85.0
1 NaN 数学 80.0
2 NaN 英语 90.0
3 NaN NaN NaN
4 小王 语文 85.0
5 NaN 数学 NaN
6 NaN 英语 90.0
7 NaN NaN NaN
8 小刚 语文 85.0
9 NaN 数学 80.0
10 NaN 英语 90.0

步骤4:删除掉全是空值的行

studf.dropna(axis="index", how='all', inplace=True)
studf

姓名 科目 分数
0 小明 语文 85.0
1 NaN 数学 80.0
2 NaN 英语 90.0
4 小王 语文 85.0
5 NaN 数学 NaN
6 NaN 英语 90.0
8 小刚 语文 85.0
9 NaN 数学 80.0
10 NaN 英语 90.0

步骤5:将分数列为空的填充为0分

studf.fillna({"分数":0})

姓名 科目 分数
0 小明 语文 85.0
1 NaN 数学 80.0
2 NaN 英语 90.0
4 小王 语文 85.0
5 NaN 数学 0.0
6 NaN 英语 90.0
8 小刚 语文 85.0
9 NaN 数学 80.0
10 NaN 英语 90.0
# 等同于
studf.loc[:, '分数'] = studf['分数'].fillna(0)
studf

姓名 科目 分数
0 小明 语文 85.0
1 NaN 数学 80.0
2 NaN 英语 90.0
4 小王 语文 85.0
5 NaN 数学 0.0
6 NaN 英语 90.0
8 小刚 语文 85.0
9 NaN 数学 80.0
10 NaN 英语 90.0

步骤6:将姓名的缺失值填充

使用前面的有效值填充,用ffill:forward fill

studf.loc[:, '姓名'] = studf['姓名'].fillna(method="ffill")
studf

姓名 科目 分数
0 小明 语文 85.0
1 小明 数学 80.0
2 小明 英语 90.0
4 小王 语文 85.0
5 小王 数学 0.0
6 小王 英语 90.0
8 小刚 语文 85.0
9 小刚 数学 80.0
10 小刚 英语 90.0

步骤7:将清洗好的excel保存

studf.to_excel("./datas/student_excel/student_excel_clean.xlsx", index=False)

总结

以上就是我在处理客户端真实IP的方法,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
python笔记(2)
Oct 24 Python
python算法学习之桶排序算法实例(分块排序)
Dec 18 Python
初步介绍Python中的pydoc模块和distutils模块
Apr 13 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
Python实现多线程的两种方式分析
Aug 29 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
Python实现最常见加密方式详解
Jul 13 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 #Python
Python操作qml对象过程详解
Sep 26 #Python
python 字典的打印实现
Sep 26 #Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 #Python
QML使用Python的函数过程解析
Sep 26 #Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 #Python
python3多线程知识点总结
Sep 26 #Python
You might like
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
js实现微信分享代码
2020/10/11 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python常用运维脚本实例小结
2020/02/14 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Python如何输出警告信息
2020/07/30 Python
python脚本第一行如何写
2020/08/30 Python
Java基础知识面试要点
2016/07/29 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
家长写给孩子的评语
2014/04/18 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
网络管理员岗位职责
2015/02/12 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
JavaScript实现两个数组的交集
2022/03/25 Javascript