千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > DataFrame之缺失值处理

DataFrame之缺失值处理

来源:千锋教育
发布人:syq
时间: 2022-08-12 14:52:17 1660287137

  只要和数据打交道,就不可能不面对一个令人头疼的问题-数据集中存在空值。空值处理,是数据预处理之数据清洗的重要内容之一。本篇文章更加细致的讨论一下空值在Pandas中的判断和处理。

DataFrame之缺失值处理

  #### pandas对空值的表现

  首先我们有三张表格:  

屏幕快照 2021-05-26 下午4.37.06

  在jupyter notebook中我们读取数据如下:  

屏幕快照 2021-05-26 下午4.31.58

  通过对比我们发现:

  > 1. 不加入空格时,序号列被读为float型,出生日期列被读为datetime64型,而加入了空格后,统一解读为object型。

  >

  > 2. 不加入空格时,序号列和姓名列中的缺失值默认为NaN,而时间则为NaT,而加了空格后,缺失值统一为NaN。

  > 3. 当时间识别为datetime64类型时,其格式就是输入的格式,但其识别为字符串时,格式会统一加上时分秒。

  #### 判断缺失值

  缺失值:在DataFrame中读出数据显示为NaN或者NaT(缺失时间),在Series中为None或者NaN均可。

  快速确认数据集中是不是存在缺失值。有两个函数 **isnull, isna**,这两个函数可以帮助我们快速定位数据集中每个元素是否为缺失值。

  ##### isna(isnull)的使用:

  先说一下被问过很多次的问题,就是isna和isnull的区别?我们看一下如下代码:  

屏幕快照 2021-05-26 下午6.11.19

  说明其实这两个是一个函数,isnull就是isna。ok明白了吗?

  下面我们看如何使用isna,以上面的表格数据为例:

  查看所有列的缺失值情况

  ```

  import pandas as pd

  ts2 = pd.read_excel('table1.xlsx',sheet_name='Sheet2',encoding='gbk') # 注意编码设置根据情况设置也可以省略

  pd.isna(ts2) # 或者ts2.isna()

  ```

  结果:  

屏幕快照 2021-05-26 下午6.43.09

  查看某一列的缺失值情况

  ```

  pd.isna(ts2['出生日期']) # ts2['出生日期'].isna()

屏幕快照 2021-05-26 下午6.12.59

  ```找出出生日期有缺失值的行,当然也可以是其他的列名

  ```

  ts2[ts2['出生日期'].isna()]

  ```  

屏幕快照 2021-05-26 下午6.51.50

  #### 缺失值处理

  对缺失值的处理主要有两种方式:

  > 1. 填充

  >

  > 2. 删除

  ##### 缺失值填充

  缺失值的填充我们使用:fillna。

  > **DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)**

  >

  > **函数作用:填充缺失值**

  value: 需要用什么值去填充缺失值

  axis: 确定填充维度,从行开始或是从列开始

  method:ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现

  limit:确定填充的个数,如果limit=2,则只填充两个缺失值。

  ```

  # 仍然是上面的数据:Sheet1

  ts1 = pd.read_excel('table1.xlsx',sheet_name='Sheet1')

  ts1.fillna(axis=0,method='bfill')

  ts1.fillna(axis=0,method='ffill')

  ts1.fillna(axis=1,method='bfill') # 当前axis=1没有太大意义,还破坏了结构

  ```  

屏幕快照 2021-05-26 下午7.07.19

  也可以使用fillna(固定value)填充所有或者填充某列内容  

屏幕快照 2021-05-26 下午7.32.27

  如果加上limit参数就会对每列出现的替换值有次数限制。

  ##### 缺失值删除

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

  >

  > 函数作用:删除含有空值的行或列

  >

  axis:维度,axis=0表示index行,axis=1表示columns列,默认为0

  how: "all"表示这一行或列中的元素全部缺失(为NaN)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列

  thresh: 一行或一列中至少出现了thresh个才删除。

  subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)

  inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。  

屏幕快照 2021-05-26 下午7.43.52  

屏幕快照 2021-05-26 下午7.45.15

  注意一下inplace参数,inplace默认为False是返回新的数据集,而如果inplace为True则表示在原数据集上操作。  

屏幕快照 2021-05-27 上午10.02.24

  更多关于“Python 培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT