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—