python进阶:np.vectorize与pandas apply比较

Py里面很有趣的一个地方是达成目的不同方法之间的效率差异可以有好几百倍,这样的例子数不胜数,下面通过一个简单的例子对比一下numpy的vectorize与pandas里面的apply,虽然apply在用法上比vectorize多,但实际上apply对大于十万行的数据处理已经是慢如蜗牛,别谈大数据了,而numpy的apply_along_axis并不好用,这个前文已经提过,而vectorize函数可以说是一个挺好的补充,提供两个array的一对一计算,这两个函数在效率上面的差别是巨大的,下面提到的三种方法都是对一个df的两个列进行相同的计算,最慢和最快的都是pandas,先看看数据:

python进阶:np.vectorize与pandas <wbr>apply比较
 

这里有一个10万行两列的df数组,需要进行的计算是如果a大于b,返回a-b,如果不是就返回a+b,看看用pandas的apply需要的时间:

python进阶:np.vectorize与pandas <wbr>apply比较
 

短短的10万行计算了5秒,再看看numpy:

python进阶:np.vectorize与pandas <wbr>apply比较
 

22毫秒对5秒,计算结果一模一样,还有更快的:

python进阶:np.vectorize与pandas <wbr>apply比较
 

用pandas切片赋值只需要10毫秒,500倍的差别! 当然这里没有对比cython不过只要需要用到循环遍历的不会快到那里去,无论是pandas还是numpy最快的方法都是数组操作,虽然本文的例子很简单,也确实有的必须通过循环遍历解决,但由于pandas和numpy提供了巨量的函数令到一些看似很复杂的问题也能通过各种数组函数解决,大大加快了效率,通常实在没有办法才用apply func一类的函数,当然前提是数据量大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值