全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

DataFrame之缺失值处理

发布时间:2022-08-12 14:52:17
发布人:syq

  只要和数据打交道,就不可能不面对一个令人头疼的问题-数据集中存在空值。空值处理,是数据预处理之数据清洗的重要内容之一。本篇文章更加细致的讨论一下空值在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万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听

相关文章

明道、teambition、Tower.im、Worktile、trello的功能都有哪些?

明道、teambition、Tower.im、Worktile、trello的功能都有哪些?

2023-10-14
反欺诈中所用到的机器学习模型有哪些?

反欺诈中所用到的机器学习模型有哪些?

2023-10-14
强化学习中on-policy与off-policy有什么区别?

强化学习中on-policy与off-policy有什么区别?

2023-10-14
为什么交叉熵可以用于计算代价?

为什么交叉熵可以用于计算代价?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取