【学习】数据处理基础知识(缺失值处理)【pandas】
缺失数据(missing data)大部分数据分析应用中非常常见。pd设计目标之一就是让缺失数据的处理任务尽量轻松。
pd 使用浮点值NaN(Not a Number) 表示浮点和非浮点数组中的缺失数据。是一个被检测出来的标识
import pandas as pd
import numpy as np
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
string_data
string_data.isnull() #内置的None值也会被当作Na处理
string_data[0] = None
string_data.isnull() Out[180]:
0 True
1 False
2 True
3 False
dtype: bool
Na处理方法
"""
=====Na处理方法=========
dropna 根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阀值调节对缺失值的容忍度
fillna 用指定值或插值方法填充缺失数据
isnull 返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值,该对象的类型与源类型一样
notnull isnull的否定式
"""
1、 滤除缺失数据
#dropna 返回一个仅含非空数据和索引值的Series from numpy import nan as NA
data = pd.Series([1, NA, 3.5, NA, 7])
data.dropna() Out[183]:
0 1.0
2 3.5
4 7.0
dtype: float64 #也可以通过布尔型索引达到这个目标
data[data.notnull()]
#对于dataFrame,dropna默认丢弃任何含有缺失值的行
data = pd.DataFrame([[1., 6.5, 3], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3]])
cleaned = data.dropna()
data
Out[187]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
cleaned
Out[188]:
0 1 2
0 1.0 6.5 3.0
data.dropna(how = 'all')
Out[189]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
只用这种方式丢弃列,只需传入axis =1 即可
#只用这种方式丢弃列,只需传入axis =1 即可
data[4] = NA
data
data.dropna(axis = 1, how = 'all')
另一个滤除DF的行问题涉及时间序列数据,假设你只想留下一部分预测数据,可以用thresh参数实现些目的
df = pd.DataFrame(np.random.randn(7, 3))
df
df.ix[:4, 1] = NA; df.ix[:2, 2] = NA
Out[195]:
0 1 2
0 -1.391379 NaN NaN
1 0.283693 NaN NaN
2 -1.256739 NaN NaN
3 -0.279809 NaN 0.511898
4 -2.942845 NaN -0.938693
5 1.478454 -1.869872 -1.815566
6 -1.001717 -0.074136 -1.132250
df.dropna(thresh = 3)
Out[196]:
0 1 2
5 1.478454 -1.869872 -1.815566
6 -1.001717 -0.074136 -1.132250
2、 填充缺失 数据
fillna方法是最主要的函数,通过一个常数调用fillna就会将缺失值替换为那个常数值
df.fillna(0)
Out[197]:
0 1 2
0 -1.391379 0.000000 0.000000
1 0.283693 0.000000 0.000000
2 -1.256739 0.000000 0.000000
3 -0.279809 0.000000 0.511898
4 -2.942845 0.000000 -0.938693
5 1.478454 -1.869872 -1.815566
6 -1.001717 -0.074136 -1.132250
#若是通过一个字典调用fillna, 就可以实现对不同的列填充不同的值
df.fillna({1: 0.5, 3: -1})
Out[198]:
0 1 2
0 -1.391379 0.500000 NaN
1 0.283693 0.500000 NaN
2 -1.256739 0.500000 NaN
3 -0.279809 0.500000 0.511898
4 -2.942845 0.500000 -0.938693
5 1.478454 -1.869872 -1.815566
6 -1.001717 -0.074136 -1.132250
#fillna默认会返回新对象,但也可以对现有对象进行就地修改
#总是返回被填充对象的引用
_ = df.fillna(0, inplace = True)
df
Out[200]:
0 1 2
0 -1.391379 0.000000 0.000000
1 0.283693 0.000000 0.000000
2 -1.256739 0.000000 0.000000
3 -0.279809 0.000000 0.511898
4 -2.942845 0.000000 -0.938693
5 1.478454 -1.869872 -1.815566
6 -1.001717 -0.074136 -1.132250
对reindex有效的那些插值方法也可用于fillna
df = pd.DataFrame(np.random.randn(6, 3))
df.ix[2:, 1] = NA; df.ix[4:, 2] = NA
df Out[204]:
0 1 2
0 1.498980 -0.048566 1.406554
1 1.143778 -0.370818 1.333525
2 -2.557671 NaN 0.419188
3 -0.648393 NaN -0.159103
4 0.794345 NaN NaN
5 1.814522 NaN NaN
#ffill 向前填充值
#bfill 向后填充值
df.fillna(method = 'ffill') Out[205]:
0 1 2
0 1.498980 -0.048566 1.406554
1 1.143778 -0.370818 1.333525
2 -2.557671 -0.370818 0.419188
3 -0.648393 -0.370818 -0.159103
4 0.794345 -0.370818 -0.159103
5 1.814522 -0.370818 -0.159103
#可填充最大标识量为2
df.fillna(method = 'ffill', limit =2) Out[206]:
0 1 2
0 1.498980 -0.048566 1.406554
1 1.143778 -0.370818 1.333525
2 -2.557671 -0.370818 0.419188
3 -0.648393 -0.370818 -0.159103
4 0.794345 NaN -0.159103
5 1.814522 NaN -0.159103
#均值或中位数填充
data = pd.Series([1., NA, 3.5, NA, 7])
data
data.fillna(data.mean()) Out[215]:
0 1.000000
1 3.833333
2 3.500000
3 3.833333
4 7.000000
dtype: float64
"""
=====fillna函数的参数======
value 用于填充缺失值的标量值或字典对象
method 插值方式,如果函数调用时未指定其他参数的话,默认为ffill
axis 待填充的轴,默认axis = 0
inplace 修改调用者对象而不产生副本,True为就地修改
limit (对于前向和后台填充)可以连续填充的最大数量
"""
【学习】数据处理基础知识(缺失值处理)【pandas】的更多相关文章
- 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL))
关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 欢迎fork本项目原始链接:关于图计算&图学习的基础知识概览:前置知识点学习 ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- Ant学习-001-ant 基础知识及windows环境配置
一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- 【学习】数据处理基础知识(基本功能)【pandas】
本章介绍pandas的重要功能,只记录一些重点内容 1.重新索引 pandas对象的一个重要方法是reindex,其作用是创建一个适应用新索引的新对象 #重新索引 obj = pd.Series([4 ...
- 学习Python3基础知识过程中总结
print()中end==""的用法 例子:用Python3输出九九乘法表: for i in range(1,10): for j in range(1,i+1): s=i*j ...
- three.js学习笔记--基础知识
基础知识 从去年开始就在计划中的three.js终于开始了 历史介绍 (摘自ijunfan1994的转载,感谢作者) OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于Op ...
- SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下: ...
随机推荐
- uWSGI+Django+nginx(下)
在上篇文章 说的uWSGI和Django都已没问题的情况下 找到 nginx的配置文件 我的是:/etc/nginx/nginx.conf 修改这个文件 在http{}里加入 下面的 server { ...
- 测试miniconda,python以及机器学习包是否安装成功
1.测试安装版本 conda -V python -V 2.安装的命令 (1)库升级和安装 升级全部库: conda upgrade --all [不知道为什么,我的conda install nu ...
- Pycharm桌面图标(Fedora)
1.解压pycharm压缩包至/usr/local/pycharm文件夹下 2.在/usr/share/applications/目录下,新建Pycharm.desktop文件,内容如下: [Desk ...
- svn的分支与合并
作者:fbysss msn:jameslastchina@hotmail.com blog:blog.csdn.net/fbysss 声明:本文由fbysss原创,转载请注明出处 关键字:svn分支 ...
- Python环境os模块功能
功能 语句 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名: os.listdir() 函数用来删除一个文件: os.remove( ...
- Xshell5一打开就提示要使用该程序,请更新至最新版本
网上有两种方法 方法一:临时 修改系统时间,修改为一年前的时间即可.但是你会发现修改回当前时间后,xshell又打不开了 方法二:替换xshell文件 找到xshell安装位置,如果是快捷方式,可以右 ...
- dbca建库--linux上使用vnc图形化安装oracle10g版本
选择创建数据库 配不配置em,自己决定,我们选择配置 配置下面账户密码,在项目中,下面账户肯定是不相同的,我们这里输入相同的,密码为oracle10g 选择文件系统存放(asm和字符设备暂时不能存放) ...
- python 基础之注释变量常量
一:注释 注释: 就是对代码的解释 方便大家阅读代码 1.注释的分类 (1)单行注释 # 在python中在行首添加一个#号就将这一行进行注释 #单行注释: 用#开头,后面跟上任意字符串 #pyth ...
- Linux文件同步
简介 文件实时同步对于运维是个很常见的需求. 如集群的机器,需要上传个文件,之前的步骤是每台服务器分别上传. 做文件同步以后,只上传一台,其他机器自动同步. 目前实现实时同步的主流方案有 rsync+ ...
- 漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?(转)
知乎链接:https://zhuanlan.zhihu.com/p/57354304 1. 锁的由来? 学习linux的时候,肯定会遇到各种和锁相关的知识,有时候自己学好了一点,感觉半桶水的自己已经可 ...