pandas 学习 第十一篇:处理缺失值
Pandas中的缺失值是指nan、None和NaT。如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项:
pandas.options.mode.use_inf_as_na = True
注意,None和None是相等的,但是缺失值和其他任何值(包括缺失值)是不相等的。
>>> None==None
True
>>> np.nan == np.nan
False
一,检测缺失值
检测缺失值的函数是isna()和notna(),在DataFrame和Series对象中也有这两个函数,这两个函数返回的结果都是布尔类型,是原始对象的掩码索引数组:
pandas.isna(obj)
pandas.notna(obj)
举个例子,创建一个ndarray数组,使用pd.isna()来检测该数组中的缺失值:
>>> array = np.array([[1, np.nan, 3], [4, 5, np.nan]])>>> pd.isna(array)
array([[False, True, False],
[False, False, True]])
二,删除缺失值
对于DataFrame而言,缺失值可能存在于某一个行的某一列中,在删除缺失值时,通常情况下,需要把一整行的数据都删除。当某一列出现的缺失值过多时,通常考录把该列整体删除。
DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)
参数注释:
- axis:轴,默认值是0,axis=0或'index'表示行,axis=1或'columns'表示列,当轴包含缺失值时,删除该轴(一行或一列)。
- how:有效值是any和all,any表示只要行或列中出现缺失值,就删除该轴;all表示只有当行或列中的元素都是缺失值时,才删除该轴。
- thresh:设置一行或一列中非缺失值的阈值,当大于该阈值时,该轴不会被删除。
- subset:在subset中指定的列或行中查找缺失值
- inplace:如果设置为True,那么替换原始的DataFrame对象,返回None。
三,填充缺失值
把出现缺失值的位置称作一个hole(空洞),当某一列中出现的缺失值较少时,可以考虑填充缺失值。
DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, **kwargs)
参数注释:
- value:用作填充的值
- method:填充的方法,有效值是:‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None
- limit:如果指定method,那么limit表示在向前或向后寻找有效值的过程中,遇到的连续NaN的最大数量,换句话说,如果空洞向前或向后存在连续的NaN数量大于该阈值,该空洞不会被填充。如果未指定method,那么limit是填充的NaN的最大数量。
填充的方法主要是回填和补填,回填(‘backfill’, ‘bfill’)是指用空洞下一个有效值来填充空洞;补填(‘pad’, ‘ffill’)是指用空洞之前的一个有效值来填充空洞。也就是说,用空洞前后的有效值来填充空洞。
举个例子,在补填缺失值时,设置一列中连续空洞的数量不要超过2个,当连续空洞的数量超过2时,只填充第一个空洞。
In [47]: df
Out[47]:
one two three
a NaN -0.282863 -1.509059
c NaN 1.212112 -0.173215
e NaN NaN NaN
f NaN NaN NaN
h NaN -0.706771 -1.039575 In [48]: df.fillna(method='pad', limit=1)
Out[48]:
one two three
a NaN -0.282863 -1.509059
c NaN 1.212112 -0.173215
e NaN 1.212112 -0.173215
f NaN NaN NaN
h NaN -0.706771 -1.039575
四,使用插补法填充缺失值
fillna()函数使用简单的方法来填充缺失值,插补法是比fillna()函数高级的填充方法。
DataFrame.interpolate(self, method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, **kwargs)
参数注释:
- method:插补的方法
- limit:表示在向前或向后寻找有效值的过程中,遇到的连续NaN的最大数量,换句话说,如果空洞向前或向后存在连续的NaN数量大于该阈值,该空洞不会被填充。
- limit_direction :当limit指定时,有效值是‘forward’, ‘backward’, ‘both’,表示按照该方向填充连续的NaN
- limit_area :当limit指定时,有效值是None,'inside', 'outside',None表示没有填充限制,inside表示NaN被有效值环绕,NaN在中心,有效值在外围,利用有效值向内推测有效值;outside表示有效值被Nan环绕,有效值在中心,而NaN在有效值的外围,利用有效值向外推测有效值。
插补的方法有很多,简单的插补方法有:
- linear:线性插补,把数据值看作是等间距的,把空洞或连续空洞两端的有效值均匀分割成n+1份,n是空洞或连续空洞的数量。
- time:按照时间间隔来填充数据,常用的时间间隔是day
- pad:回填,利用现有的值来填充缺失值
- 复杂的插补算法需要使用scipy包。
参考文档:
pandas 学习 第十一篇:处理缺失值的更多相关文章
- 从.Net到Java学习第十一篇——SpringBoot登录实现
从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做 ...
- pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)
DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...
- pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)
长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...
- pandas 学习 第2篇:Series -(创建,属性,转换和索引)
序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...
- Pandas 学习 第9篇:DataFrame - 数据的输入输出
常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...
- pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...
- pandas 学习 第1篇:pandas基础 - 数据结构和数据类型
pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...
随机推荐
- 微信小程序开发--flex详细解读
一.结构:flex布局 是由一个大的容器加上多个子元素组成. <view class="container"> <view </view> <v ...
- How to decode a H.264 frame on iOS by hardware decoding?
来源:http://stackoverflow.com/questions/25197169/how-to-decode-a-h-264-frame-on-ios-by-hardware-decodi ...
- LabWindows/CVI第一章:基本规则
一. #include<stdio.h> //头文件,#号是预处理指令,standard input output header的缩写. void main() ...
- unity点击按钮弹出操作提示界面
1.首先在相应的位置添加一个(UGUI控件)image,在image下添加文本框和按钮设计弹出框内容如图: 2.新建C#脚本UITips using System.Collections; using ...
- Linux自有服务(1)-Linux从入门到精通第五天(非原创)
文章大纲 一.运行模式二.用户与用户组管理(重点)三.网络设置四.ssh服务(重点)五.学习资料下载六.参考文章 自有服务,即不需要用户独立去安装的软件的服务,而是当系统安装好之后就可以直接使用的 ...
- STM32系列芯片命名规范
1.STM32的基础知识 STM32是意法半导体公司,基于ARM Cortex®-M0,M0+,M3, M4和M7内核生产的系列通用MCU.截止当前时间为止(20190515),STM32有STM32 ...
- cocoapods升级
1.更新gem:sudo gem update --system 先要查看下源,如果源被墙了就换地址:https://gems.ruby-china.com 1.1.删除gem源:gem source ...
- 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...
- Unity错误提示大全(遇到问题就更新)
记录下使用Unity中遇到的所有错误提示 1.Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The class ...
- 20180706模拟赛T2——染色
文件名: seq 题目类型: 传统题 时间限制: 1秒 内存限制: 128MB 编译优化: 无 题目描述 小A正在帮助小M刷她家的墙壁 小M家的墙可以分为\(n\)块,每段需要被刷成黑色或者白色.你可 ...