在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值
为了方便理解,我们先创建一组带有缺失值的简单数据用于讲解
对于现在的数据量,我们完全可以直接查看整个数据来检查是否存在缺失值看到有两列含有缺失值。当然如果数据集比较大的话,就需要使用data.isnull().sum()来检查缺失值
或者使用http://data.info()来检查所有数据
可以看到一共有7行,但是有两列的非空值都不到7行
一种常见的办法是用单词或符号填充缺少的值。例如,将丢失的数据替换为'*'。我们可以使用.fillna('*') 将所有缺失值替换为*
当然也可以针对某一列的缺失值进行填充,比如选择score列进行填充
还有一种办法是将其替换为平均值。如果是数字,则可以包括均值;如果是字符串,则可以选择众数。比如可以将score列的缺失值填充为该列的均值
当然也可以使用插值函数来填写数字的缺失值。比如取数据框中缺失值上下的数字平均值。
或者data.fillna(axis=1,method='ffill')来横向/纵向用缺失值前面的值替换缺失值
除了对缺失值进行填充,另一种更省事的办法是直接删除缺失值所在行
上面是删除所有缺失值所在行,当然也可以指定删除某列的缺失值比如将score列的缺失值所在行删除
处理非标准缺失值
有时候缺失值会以其他形式出现,比如在录入数据的时候由于失误将数据输错等,那么这种类型的数据也可以作为缺失值去处理。我们来看看
可以看到,score列本应该是数字,但是却出现两个并不是数字也不是nan的异常值,当我们使用data.isnull()函数时,可以看到只有一个空值。
所以我们可以通过使用replace函数先将其转换为NaN来处理此问题,然后根据需要,使用上面的方法处理缺失值。
上面我们用自己创建的数据进行示例,那么在这一节我们看在真实的数据分析案例数据来进行缺失值处理。使用的数据为之前文章使用过的NBA数据(可以查看早起python历史文章获取数据与更多分析),我们先导入数据并检查缺失值
可以看到其他列的数据都很完美,只有notes列仅有5424行非空,意味着我们的数据集中超过120,000行在此列中具有空值。我们先考虑删除缺失值。
可以看到只剩下5424条数据,但是这种形式的数据清洗对数据集没有意义的,因为notes只是记录了一些比赛的说明,缺少注释对分析NBA来说不会有太大影响。并且如果我们的数据集包含一百万条有效记录,而一百条缺少相关数据,那么删除不完整的记录可能是一个合理的解决方案。
这样,生成的DataFrame包含所有126,314场比赛记录,但不包括有缺失值的notes列。