400-616-5551

您所在位置: 首页> 学习课程> Python数据科学实践 | Pandas 3

Python数据科学实践 | Pandas 3

发布百知教育 来源:学习课程 2019-10-16

之前我们学习如何使用Pandas进行切片操作、学习如何进行统计描述分析、同时介绍一些常用技巧。


这一节我们继续来学习Pandas这个神器的其他武功:


如何使用Pandas的apply()函数;

如何使用Pandas进行分组和聚合操作。


首先,咱们假设用Pandas已经读入数据,并且完成了去重与去缺失值(Pandas 1)。现在存储的数据名字为raw_data2。



1、apply()—为你私人定制的函数



Pandas内置的一些函数能非常方便的进行大部分数据处理,但是,现实中的场景往往得“按需定制”,内置的函数已经无法满足需求了。这可如何是好?

直观的想法就写个循环,一个个元素处理吧!这种循环最致命的硬伤是:速度得多慢?要知道,Python中的for循环恐怕是最耗时间的控制语句了,而且,和if语句组合,可能还得写好几个!


为了克服这样的困难,Pandas已经非常贴心的提供了apply()函数,能和Python的函数完美兼容!现在,我们使用apply()函数对上一节中的“人均”重新做清洗。


表1 apply()函数


1.png


例1 apply()函数




python培训



上述代码效果等价于for循环+if条件判断,结果与之前一致。


好奇的宝宝可能就要问了:看上去程序还是用到了很多if判断,这和直接写for循环+if判断有什么区别呢?区别在于,apply()函数经过C的加速优化后,比Python原生的for循环要快出不少。二者分别的运行结果如表2。


表2 二者运行速度差别



4.png


apply方法比for循环的速度快了5.5倍!而且,还得注意一点——这个数据集的数据量还不足1000条,随着数据量的增加,这个速度差别会更加明显!可以说,会不会使用apply()函数就能在很大程度上看出区别!


2、分组与聚合——速度与优雅兼具



政委此时仿佛看破红尘,一缕胡须,自言自语道:请客吃饭的钱又不能报销,能不能找便宜又上档次的店家?


这可又怎么办,总不能还写个 for循环+N个if判断 吧?apply?不行不行,这还是有N个if判断再循环相加,实在太不Pythonic了!这要传出去,还怎么混!

不怕,这一节,我们用分组聚合搞定这个问题!


分组聚合,顾名思义,就是把数据元素按照某些规则进行分组,再对其进行分别运算,最后聚合起来。原理如图1。


python培训

图1 分组聚合原理图


好奇的宝宝可能又要问了:Pandas是如何实现分组聚合的?就是下面这样喽:


python培训


WTF....? for循环+if条件判断?当然不可能啦,这样写代码会累死。其实解决方法图1已经很明显地表示出来了:key + data —— 字典操作!


需要说明的是,字典分组非常快(字典是基于哈希运算的,时间复杂度是O(1));在聚合阶段,Pandas才会真正进行运算操作。这一机制也进一步加快了Pandas进行分组聚合的操作速度。具体函数如下:


表3 分组与聚合函数


8.png


例2 分组聚合



python培训班


运行结果如图2。



5.png


图2 分组聚合运行结果


下面我们就用刚刚学到的分组聚合的功夫找到性价比最高的商家,为政委排忧解难。首先,按用户对商家的评分划分出三个等级:0、1、2,分别代表低级商户、中级商户、高级商户。再用分组聚合的方法计算出每个等级的人均消费(如果不用分组聚合如何实现?)。惊奇地发现,评分好的商家竟然人均也是最低的!


当然,条条大路通罗马。并不是只有用聚合函数才能达到效果,一些简单的运算,如例子中的加法运算,还可以通过Pandas判断表达式来完成,在实际使用中视具体情况进行选择。



python培训:http://www.baizhiedu.com/python2019







上一篇:python培训 | python是人工智能重要工具,怎么入门?

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请