【学习】数据处理基础知识(缺失值处理)【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     True1    False2     True3    Falsedtype: 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.02    3.54    7.0dtype: 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()
dataOut[187]:      0    1    20  1.0  6.5  3.01  1.0  NaN  NaN2  NaN  NaN  NaN3  NaN  6.5  3.0
cleanedOut[188]:      0    1    20  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] = NAOut[195]:           0         1         20 -1.391379       NaN       NaN1  0.283693       NaN       NaN2 -1.256739       NaN       NaN3 -0.279809       NaN  0.5118984 -2.942845       NaN -0.9386935  1.478454 -1.869872 -1.8155666 -1.001717 -0.074136 -1.132250
df.dropna(thresh = 3)Out[196]:           0         1         25  1.478454 -1.869872 -1.8155666 -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         20  1.498980 -0.048566  1.4065541  1.143778 -0.370818  1.3335252 -2.557671       NaN  0.4191883 -0.648393       NaN -0.1591034  0.794345       NaN       NaN5  1.814522       NaN       NaN
#ffill 向前填充值#bfill 向后填充值
df.fillna(method = ‘ffill‘)

Out[205]:           0         1         20  1.498980 -0.048566  1.4065541  1.143778 -0.370818  1.3335252 -2.557671 -0.370818  0.4191883 -0.648393 -0.370818 -0.1591034  0.794345 -0.370818 -0.1591035  1.814522 -0.370818 -0.159103
#可填充最大标识量为2
df.fillna(method = ‘ffill‘, limit =2)

Out[206]:           0         1         20  1.498980 -0.048566  1.4065541  1.143778 -0.370818  1.3335252 -2.557671 -0.370818  0.4191883 -0.648393 -0.370818 -0.1591034  0.794345       NaN -0.1591035  1.814522       NaN -0.159103
#均值或中位数填充
data = pd.Series([1., NA, 3.5, NA, 7])
data
data.fillna(data.mean())

Out[215]: 0    1.0000001    3.8333332    3.5000003    3.8333334    7.000000dtype: float64
"""=====fillna函数的参数======value  用于填充缺失值的标量值或字典对象method 插值方式,如果函数调用时未指定其他参数的话,默认为ffillaxis   待填充的轴,默认axis = 0inplace  修改调用者对象而不产生副本,True为就地修改limit   (对于前向和后台填充)可以连续填充的最大数量 """
时间: 2024-11-07 07:17:33

【学习】数据处理基础知识(缺失值处理)【pandas】的相关文章

Ant学习-001-ant 基础知识及windows环境配置

一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.TestNG等搭建持续集成测试开发环境,从而高效.高质量的构建产品. Ant 有以下一些优点: 跨平台,可移植.Ant 是 Java 语言编写的,所以有很好的跨平台性和可移植性,无论是在 windows.Linux,还是 mac. 操作简单. Ant 是由一个内置任务和可选任务组成的,运行时需要一个构

hadoop学习笔记——基础知识及安装

1.核心 HDFS  分布式文件系统    主从结构,一个namenoe和多个datanode, 分别对应独立的物理机器 1) NameNode是主服务器,管理文件系统的命名空间和客户端对文件的访问操作.NameNode执行文件系统的命名空间操作,比如打开关闭重命名文件或者目录等,它也负责数据块到具体DataNode的映射 2)集群中的DataNode管理存储的数据.负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建删除和复制工作. 3)NameNode是所有

Web前端学习①Web基础知识

<1>Web前端Web基础知识 一.前端工程师的角色 一个网站的建设需要以下角色: ①策划人员:方案 ②美工/UI设计师:设计图 (.psd  .rp) ③前端工程师:静态网页 ④后端工程师:获取数据 ( Java   PHP  .NET) 二.Web的基础知识 1.Web(万维网)与Internet(因特网) ①Internet简介:定义.主要服务.基本实现技术 ②Web与Internet关系 Web是Internet提供的服务. ③Web简介:万维网 2.Web的工作原理 ①Web的工作原

如何学习安卓(android)开发,需要学习哪些基础知识?

随着智能手机的流行,现在很多大大小小的开发商都需要在手机上具备客户端,这里是一片强大的吸金磁场,那么很多想学习android的朋友,都会有个疑问,那就是:安卓(android)应该怎么学,需要哪些基础知识? 下面是我根据自己和周围朋友的一些经验,总结出来的几点,希望对想学安卓(Android)开发的朋友有所帮助. 1.安卓(Android)开发的分类: (1)安卓(Android)底层开发:我们需要掌握C语音.Linux操作系统等比较底层的知识,以后的发展方向应该是驱动.嵌入式开发.协议开发.

.net学习必备基础知识

进入21世纪,开发Windows程序已经成为以Dll为基础,而.NET  Framwork也日益成为我们开发软件的有利工具,下边我们就来先看一下,学习.net的一些必备基础知识. 一,首先.net是由公共语言执行时期(CLR)与基底类别库(BCL)组成.这两个东西是什么呢?我们先来看一下: 1,CLR是公共语言运行时,Common language Runtime 和Java虚拟机一样也是一个运行时环境,他负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离.也就是给了我们

web前端学习的基础知识1

Web前端是一个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过5年.Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征.目前看来,这个一个就业前景很大的职业. web前端的学习不能一蹴而就,也不是那么轻而易举就能够学会的,需要我们慢慢的去学习,去理解. 今天,给大家说的就是一些web前端学习中的一些基础知识. web前端中使用的语言不是我们人与人之间进行交流的语言,而是计算机语言.计算机的语言有很多种:C.PHP.Rudy.Java.C#.Basic.JS.....这里主要

JAVA程序员需要学习哪些基础知识?

极客营认为想要成为一个合格的java程序员,必须需要牢固的基础,这样在未来接触新的知识的时候,才能快速吸收,极客营认为基础不牢固的程序员,随时都会被新的知识和技术所淘汰,下盘不稳风一吹就倒,那么作为一个合格的java程序员应该具备哪些知识呢?今天极客营就来和大家分享java高手之路上的必备基础知识: 一.面向对象的知识:JAVA是一个面向对象的开发语言,因此熟悉面向对象对学习JAVA很有必要,您要了解:什么是对象,什么是类;什么是封装,什么是多态,什么是继承;什么是抽象类,什么是接口.了解了概念

SQLServer学习笔记&lt;&gt;.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   同时往数据库表插入一些数据,用户后续对数据库的sql的练习.在这里有需要的可以下载相应的脚本进行数据库的初始化.我放到百度云上面,请戳 我:http://yun.baidu.com/share/link?shareid=3635107613&uk=2971209779,提供了<Sqlserver

汇编语言学习(基础知识)01

汇编语言(基础知识)01 1.  汇编语言得主体是汇编指令.汇编指令和机器指令的差别在于指令的表示方法上.汇编指令是机器指令便于记忆的书写格式. 2.  操作 机器指令 汇编指令 3.  汇编语言的组成: (1)       汇编指令:机器码的助记符,有对应的机器码. (2)       伪指令:没有对应的机器码,由编译器执行,计算机并不执行. (3)       其他符号:如+.-.*./等,有编译器识别,没有对应的机器码. 4.  存储器 cpu是计算机的核心部件,他控制整个计算机的运行并进