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 apply比较_第1张图片
 

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

python进阶:np.vectorize与pandas apply比较_第2张图片
 

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

python进阶:np.vectorize与pandas apply比较_第3张图片
 

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

python进阶:np.vectorize与pandas apply比较_第4张图片
 

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

你可能感兴趣的:(python)