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的框架下的web app的详细教程
Apr 30 Python
python版简单工厂模式
Oct 16 Python
django表单实现下拉框的示例讲解
May 29 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
通过实例了解python property属性
Nov 01 Python
python 实现return返回多个值
Nov 19 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
pycharm的python_stubs问题
Apr 08 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
python 获取谷歌浏览器保存的密码
Jan 06 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 COOKIE设置为浏览器进程
2009/06/21 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
php实现中文转数字
2016/02/18 PHP
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
Python selenium如何设置等待时间
2016/09/15 Python
python中执行shell的两种方法总结
2017/01/10 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
计算机专业毕业生的自我评价
2013/11/18 职场文书
建筑施工员岗位职责
2013/11/26 职场文书
社区十八大感言
2014/01/19 职场文书
毕业生自荐书
2014/02/02 职场文书
教师个人剖析材料
2014/02/05 职场文书
大学生英语演讲稿
2014/04/24 职场文书
大雁塔英文导游词
2015/02/10 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
奔腾年代观后感
2015/06/09 职场文书
python实现自动化群控的步骤
2021/04/11 Python
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS