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两种最主要数据结构,索引 ...
随机推荐
- Android viewPager+fragment实现滑页效果
先上图,手指在手机向左或者向右滑就可以实现相应的页面切换. 先看activity_main.xml文件,非常简单,主要是三个标题TextView和viewpager <?xml version= ...
- Markdown随笔
Markdown随笔 这两天兴致来了,想尝试一下使用 Markdown. 写这篇博客时我用的是: MarkdownPad 2 关于 MarkdownPad 2 的安装破解网上有很多教程了,这里我就不赘 ...
- CDH5.13快速体验
相对于易用性很差Apache Hadoop,其他商业版Hadoop的性能易用性都有更好的表现,如Cloudera.Hortonworks.MapR以及国产的星环,下面使用CDH(Cloudera Di ...
- Mysql-修改用户连接数据库IP地址和用户名
将用户连接数据库(5.7.14-7)的IP地址从 10.10.5.16 修改为 10.11.4.197 Mysql> rename user 'username'@'10.10.5.16' ...
- 安装centos6.10时,安装完成重启报错error 15,file not found
今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...
- hadoop hdfs 有内网、公网ip后,本地调试访问不了集群解决
问题背景: 使用云上的虚拟环境搭建测试集群,导入一些数据,在本地idea做些debug调试,但是发现本地idea连接不上测试环境 集群内部配置hosts映射是内网映射(内网ip与主机名映射),本地只能 ...
- websocket 的基本用法
项目当中使用到了websocket,以前的项目当中使用到了另外一个类似的socket.io,两者的区别和联系在另外一篇文章当中有提及,这里就简单的写下websocket的用法 下面的例子是阮一峰的We ...
- HDU5126 stars(cdq分治)
传送门 题意: 先有两种操作,插入和查询,插入操作则插入一个点\((x,y,z)\),查询操作给出两个点\((x_1,y_1,z_1),(x_2,y_2,z_2)\),回答满足\(x_1\leq x\ ...
- 03-docker入门-创建 docker 镜像
方法1:从运行的容器创建方法2:编写 DockFile 文件创建 方法1: 打包镜像 docker commit -m "Test a change" 610 ubuntu:tes ...
- ubuntu gitclone下载的文件放哪里了
在home主文件夹里面.