利用Python进行数据分析2-数据清洗和准备


在本文中,我会讨论处理缺失数据、重复数据、字符串操作和其它分析数据转换的⼯具。

处理缺失数据

在许多数据分析⼯作中,缺失数据是经常发⽣的。pandas的⽬标之⼀就是尽量轻松地处理缺失数据。例如,pandas对象的所有描述性统计默认都不包括缺失数据。
缺失数据在pandas中呈现的⽅式有些不完美,但对于⼤多数⽤户可以保证功能正常。对于数值数,pandas使⽤浮点值NaN(Not a Number)表示缺失数据。我们称其为哨兵值,可以⽅便的检测出来:
在这里插入图片描述
在这里插入图片描述
在pandas中,我们采⽤了R语⾔中的惯⽤法,即将缺失值表示为NA,它表示不可⽤not available。在统计应⽤中,NA数据可能是不存在的数据或者虽然存在,但是没有观察到(例如,数据采集中发⽣了问题)。当进⾏数据清洗以进⾏分析时,最好直接对缺失数据进⾏分析,以判断数据采集的问题或缺失数据可能导致的偏差。
Python内置的None值在对象数组中也可以作为NA:
在这里插入图片描述
pandas项⽬中还在不断优化内部细节以更好处理缺失数据,像⽤户API功能,例如pandas.isnull,去除了许多恼⼈的细节。下表列出了⼀些关于缺失数据处理的函数:

方法 说明
dropna 根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度
fillna 用指定值或插值方法(如ffill或bfill)填充缺失数据
isnull 返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值/NA,该对象的类型与源类型一样
notnull isnull的否定式

滤除缺失数据

过滤掉缺失数据的办法有很多种。你可以通过pandas.isnull或布尔索引的⼿⼯⽅法,但dropna可能会更实⽤⼀些。对于⼀个Series,dropna返回⼀个仅含⾮空数据和索引值的Series:
在这里插入图片描述
这等价于:
在这里插入图片描述
⽽对于DataFrame对象,事情就有点复杂了。你可能希望丢弃全NA或含有NA的⾏或列。dropna默认丢弃任何含有缺失值的⾏:
在这里插入图片描述
传⼊how='all’将只丢弃全为NA的那些⾏:
在这里插入图片描述
⽤这种⽅式丢弃列,只需传⼊axis=1即可:
在这里插入图片描述
在这里插入图片描述
另⼀个滤除DataFrame⾏的问题涉及时间序列数据。假设你只想留下⼀部分观测数据,可以⽤thresh参数实现此⽬的:
在这里插入图片描述
在这里插入图片描述

填充缺失数据

你可能不想滤除缺失数据(有可能会丢弃跟它有关的其他数据),⽽是希望通过其他⽅式填补那些“空洞”。对于⼤多数情况⽽⾔,fillna⽅法是最主要的函数。通过⼀个常数调⽤fillna就会将缺失值替换为那个常数值:
在这里插入图片描述
若是通过⼀个字典调⽤fillna,就可以实现对不同的列填充不同的值:
在这里插入图片描述
fillna默认会返回新对象,但也可以对现有对象进⾏就地修改:
在这里插入图片描述
对reindexing有效的那些插值⽅法也可⽤于fillna:
在这里插入图片描述
在这里插入图片描述
只要有些创新,你就可以利⽤fillna实现许多别的功能。⽐如说,你可以传⼊Series的平均值或中位数:
在这里插入图片描述
下表列出了fillna的参考:

参数 说明
value 用于填充缺失值的标量值成字典对象
method 插值方式。如果舀数调用时未指定其他参数的话,默认为“ffill"
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值