一句代码:告别Pandas的慢慢慢!

2019-11-12 10:04:08 浏览数 (1)

Swifter

Swifter是一个“以最快的方式将任何函数应用于Pandas dataframe或series”的库。

例如,假设你有两个数组:

代码语言:javascript复制
array_1 = np.array([1,2,3,4,5])
array_2 = np.array([6,7,8,9,10])

你希望创建一个新的数组,这个数组是两个数组的和,结果是:

代码语言:javascript复制
result = [7,9,11,13,15]

在Python中,可以使用for循环对这些数组求和,但这样做非常慢。相反,Numpy允许你直接对数组进行操作,这要快得多(特别是对于大型数组)。

代码语言:javascript复制
result = array_1   array_2

关键就在于,只要有可能,就要使用向量化操作。

那么Swifter能做些什么呢?

1、Swifter可以检查你的函数是否可以向量化,如果可以,就使用向量化计算。

2、如果不能进行向量化,请检查使用Dask进行并行处理是否有意义:

https://dask.org/

或者只使用普通的Pandas的apply函数,但并行会使小数据集的处理速度变慢。

所以大家面对数据集大小的不同时,要采取不同的代码思路,否则会适得其反!

以上的图表很好地说明了这一点。可以看到,无论数据大小如何,使用向量化总是更好。如果向量化不行,你可以从vanilla Pandas获得最佳速度,直到你的数据足够大。一旦超过了阈值大小,并行处理就最有意义了。

如何写代码:

代码语言:javascript复制
import pandas as pd
import swifter

df.swifter.apply(lambda x: x.sum() - x.min())

如上所示,只要在应用之前添加一个快速调用,你就可以用一个单词来运行你的padnas了!

下载使用Swifter:

https://github.com/jmcarpenter2/swifter

官方文档有案例供大家参考,在此不再做介绍。

—End—

0 人点赞