目录
在本文中,我会讨论处理缺失数据、重复数据、字符串操作和其它分析数据转换的⼯具。
处理缺失数据
在许多数据分析⼯作中,缺失数据是经常发⽣的。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" |