使用python进行数据清洗常用的库_使用python的pandas库进行数据清洗(一) - Go语言中文社区

使用python进行数据清洗常用的库_使用python的pandas库进行数据清洗(一)


一、为什么要进行数据清洗?

在接触pyhon语言之前,我已经做过很长时间数据分析工作,一直以来我都认为数据分析结果的好坏在于能不能解释现实,优质的分析能够最大程度解释现实情况,为后续工作指明方向。而影响数据分析结果的因素除了分析方法、分析师的个人经验,还有一个非常重要的点,那就是数据质量。所以很多人都说数据分析师有60%-80%的时间在进行“数据清洗”工作。GIGO,garbage in garbage out,用“脏”数据是得不出好的结论的。所以,数据分析的第一步就要进行数据清洗。

二、什么是数据清洗?

刚开始接触这个行当的时候,看到“数据清洗”这个名词,顿时有点高不可攀的样子,因为不理解什么是数据清洗,用什么洗?总不会是洗衣粉吧。后来学的多了才知道其背后的意义,说白了就是把不合理的数据剔除,以保证分析结果的质量。一开始我很好奇,在做定量研究工作的时候怎么没有提到过数据清洗(当然做了很多实际上是数据清洗的工作)。后来想想明白了,因为定量研究中大多接触不到非常大样本的数据,而在互联网公司中,每天产生的数据量非常大,而且数据质量良莠不齐,必须加以处理,于是就有了“清洗”这个工作。那么问题来了。清洗要清洗什么?要把数据里面的脏东西洗掉。什么是脏东西?影响分析结果的错误的、多余的、不合理的数据。比如常见的空值(NaN)、重复值、极端值/异常值等。下面进行一些不详细的介绍。

三、使用pandas进行数据清洗

1. 处理空值/缺失值

如果当你用python的pandas库打开数据文件,看到里面有一些‘NaN’,这就是缺失值,本应有数值的地方没有数值。NaN的解释是:not a number。pandas是有判断空值的方法的,即:

df.isnull( )、df.notnull( ),注:df即文件名,在DataFrame数据类型中经常用df指代文件名。如果使用了这两个函数,空值的位置就会标示出来。下面引入具体实例进行演示。

读取到的结果是什么呢?如下:

(1)使用df.isnull(),结果如下:

看到结果我“笑了”,我当然知道True就代表这个值是空值,问题是这么多值你给我找找试试,稳妥起见我必须知道那个空值是什么,我才能决定要怎么处理。难道寻找空值是个体力活?

(2)所以我要是使用这个函数只把有空值的行显出来:df[df.isnull().values ==True]

现在我知道空值在哪了。

(3)其实还有个方法让我可以一眼就知道哪列存在空值,然后去那一列找。df.info( )

结果可以看出,体育、军训这两列都存在空值,因为知道rangeindex = 21,而这两列都只有20个非空值,所以肯定都存在一个空值。然后可以使用df[df['体育'].isnull( )]迅速定位体育成绩是空值的学生。

这两个方法都可以去用,可根据编码习惯自由选择。

至于df.notnull( )方法,可以认为是df.isnull( )方法的反应用。

(4)已经知道了空值存在于哪里,如何处理?这取决于将要进行什么分析。

案例中的数据出现了的空值可能是两个学生因为缺考、作弊等原因导致成绩取消或者没有成绩,如果只是作为全班成绩单不进行计算,这两个空值可以填充为0。使用:df.fillna(0)

如果要进行平均分计算,这个空值就会极大地拉低全班同学的平均分,并不能真实反映全班同学的学习水平,这个时候空值就产生了类似于极端值/异常值的效果,所以这个时候最好把含有空值数据行给删除。使用df.dropna()函数。可以看出含有空值的行分别仅有一个空值,所以df.dropna(how = 'any',axis = 0),这样就把含有空值的行删除了。

从结果可以看出,第9行和第12行被删掉了。需要注意的是,这种删除只是基于视图的删除,原df是没有改变的,如果要改变df的数据需要这么做:df = df.dropna(how = 'any', axis = 0)

在实际使用的过程中还会有一些比较恶心的问题,比如我就想把体育成绩是空值的删掉,把军训是空值的填充为0。怎么做呢?答案是:先找到这行的索引,然后根据索引删除改行。

找索引:df[df['体育'].isnull() == True].index

我们发现体育成绩为空的行的行索引是9,那么这么做来删除行df.drop(9)

从视图中可以看出第9行没了。注意,原df数据并没有发生变化,第9行是依然存在的,df = df.drop(9),这么做才可以把原df数据中的第9行删除。

空值/缺失值的处理今天就说这么多吧,数据清洗的其他内容后续会继续讲到,都是一些pandas的基础用法,如果您有其他想法欢迎留言,我一定认真看,认真思考。

输出才是最好的输入。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39756540/article/details/110827532
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-31 03:35:56
  • 阅读 ( 445 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢