Pandas中的缺失值处理


相信你们在处理数据的时候常常会发现有一些数据的缺失,这个时候便会很头大,由于有时候的缺失的数据是原本就没有的,这些数据无论就行了,有的数据虽然没有,可是也能够根据一些数据推算出来这个数据是多少而后给它填上,可是有的数据缺失是随机缺失的彻底不知道应该怎么处理,因此呢今天我就带你们了解一下数据中的缺失值以及如何对缺失值进行处理。python

1、读取数据正则表达式

相信你们在使用python读取数据的时候会出现这种报错的状况。

这种状况是由于文件名中有中文,遇到这种状况第一种方式就是讲文件名改成英文,或者这样处理能够。

先使用open打开,而后赋值给变量,而后关闭掉文件,使用被赋值的变量就能够了。dom

2、处理缺失值spa

一、什么是缺失值对象

俗话说知己知彼,百战百胜,在处理缺失值以前咱们首先要了解一下什么是缺失值? 直观上理解,缺失值表示的是“缺失的数据”。能够思考一个问题:是什么缘由形成的缺失值呢?其实有不少缘由,实际生活中可能因为有的数据不全因此致使数据缺失,也有可能因为误操做致使数据缺失,又或者人为地形成数据缺失,可是主要的仍是分为机械缘由和人为缘由。索引

机械缘由是因为机械缘由致使的数据收集或保存的失败形成的数据缺失,好比数据存储的失败,存储器损坏,机械故障致使某段时间数据未能收集(对于定时数据采集而言)。rem

人为缘由是因为人的主观失误、历史局限或有意隐瞒形成的数据缺失,好比,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据字符串

缺失值从缺失的分布来说能够分为彻底随机缺失,随机缺失和彻底非随机缺失。it

  • 彻底随机缺失(missing completely at random,MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任何不彻底变量或彻底变量。
  • 随机缺失(missing at random,MAR)指的是数据的缺失不是彻底随机的,即该类数据的缺失依赖于其余彻底变量。
  • 彻底非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不彻底变量自身。

缺失值从缺失值的所属属性来说能够分为单值缺失,任意缺失和单调缺失。class

  • 单值缺失:若是全部的缺失值都是同一属性,那么这种缺失成为单值缺失。
  • 任意缺失:若是缺失值属于不一样的属性,称为任意缺失。
  • 单调缺失:对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失

在Python中缺失值被认为是None、np.nan、NaT的形式。

原理性的东西咱们就说这么多,下面咱们进入代码部门,首先咱们人为的形成一些数据的缺失

而后咱们生成一列英雄们的生日的数据列

查看数据表的信息。

二、转换数据列的类型

这个时候咱们经过info()方法发现生日列的类型是object的,须要将生日列的类型经过to_datetime()转换为日期型

三、掩码提取空值

首先使用isnull()或者notnull()来查看是否缺失

Isnull()是将缺失值判断为True,非缺失值判断为False

Notnull()将缺失值判断为False,非缺失值判断为True

  • 将有空值的行提取出来

  • 反之将非空行的数据提取出来

  1. 掩码的其余用处

4.一、将不是地球的英雄提取出来

  • 首先将那个星球的列名改成星球

  • 而后将外星球的英雄提取出来。


4.二、将1980年以后出生的英雄提取出来

4.三、将1988年1月1号以前出生的英雄提取出来

五、丢弃缺失值

既然在数据中有缺失值了,常见的一种处理办法就是丢弃缺失值。使用 dropna 方法能够丢弃缺失值。

user_info.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

seriese使用dropna比较简单,对于DataFrame 来讲,能够设置更多的参数。

axis 参数用于控制行或列,跟其余不同的是,axis=0 (默认)表示操做行,axis=1 表示操做列。

how 参数可选的值为 any(默认) 或者 all。any 表示一行/列有任意元素为空时即丢弃,all 一行/列全部值都为空时才丢弃。subset 参数表示删除时只考虑的索引或列名。thresh参数的类型为整数,它的做用是,好比 thresh=3,会在一行/列中至少有 3 个非空值时将其保留。

  • 一列数据中只要存在一个空值就删除掉


从结果能够看出,身高列和城市列都存在空值,这样就被删除掉了。

  • 一行数据中只要城市和性别出现空值就删除掉


从结果能够看出,钢铁侠、索尔由于身高出现空值而被删除这一行的数据,奇异博士由于城市出现空值而被删除一行的数据,灭霸是年龄出现了空值,可是年龄这一列并未作为删除的条件因此没有被删除掉数据。

3、填充缺失值

除了能够丢弃缺失值外,也能够填充缺失值,最多见的是使用fillna完成填充。Fillna这个名字一看就是用来填充缺失值得嘛。

一、固定值填充

填充缺失值时,常见的一种方式是使用一个标量来填充。好比咱们能够将缺失的年龄都填充为0。

  • 将英雄们的身高填充为0



固然在身高列填充0显然是不规范的,我们这里只作演示使用,你们在实际的处理数据的时候仍是要跟数据结合起来在选择填充的标量。

二、上下文填充

除了可使用标量来填充以外,还可使用前一个或后一个有效值来填充。设置参数method=’pad’或method=’ffill’可使用前一个有效值来填充。


设置参method='bfill'或method='backfill'可使用后一个有效值来填充。


除了经过fillna方法来填充缺失值外,还能够经过interpolate方法来填充。默认状况下使用线性差值,能够是设置method参数来改变方式。

三、替换缺失值

如今你们想想,到底什么才是缺失值呢,不要觉得我前边说过的那些None、np.nan、NaT这些是缺失值,这些在Pandas中被认为是缺失值,可是呢,在咱们活生生的人眼中,某些异常值也会被当成缺失值来处理。

例如,在咱们的存储的用户信息中,假定咱们限定用户都是青年,出现了年龄为40的,咱们就能够认为这是一个异常值。

再好比,咱们都知道性别分为男性(male)和女性(female),在记录用户性别的时候,对于未知的用户性别都记为了“unknown”,很明显,咱们也能够认为“unknown”是缺失值。

除了这些,有时会也会出现一些空白的字符串,这些也能够认为是缺失值。对于上面的这一系列问题,咱们可使用replace方法来替换缺失值。

  • 假设咱们如今是一个地球流浪者收容组织,不容许外星人的存在,那么英雄如今已经存在了,打又打不过,可是又不能违反组织的规定,那怎么办呢,那就把这些惹不起的外星人定义成黑户,也就是空值,不知道他们的星球属性,睁一只眼闭一只眼。

  • 这个时候外星这个属性去掉了,可是阿斯加德和泰坦星明显不是一个地球的城市,因此咱们也要将城市属性换成NaN,可是分开设置又太麻烦了,咱们就能够直接将城市做为一个映射的字典给替换掉。

  • 处理完外星人的事了以后如今返回来处理我们地球人的事,这个时候发现黑寡妇的生日是1929年,明显是一个假的出生日期,既然生日是假的年龄应该也是假的,因此咱们须要将年龄更改成unknown,而后在定义为缺失值。



除了替换特定的值之外,咱们还可使用正则表达式来替换,如将空白字符串替换为空值。

  • 将中年替换为中老年


四、使用其余对象填充

除了咱们本身手动丢弃、填充已经替换缺失值以外,咱们还可使用其余的对象来填充。

例如咱们有两个用户年龄的series,其中一个由缺失值,另一个没有,咱们能够额将没有缺失值的series的元素传给有缺失值的。

相关文章
相关标签/搜索