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

Swifter

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

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

array_1 = np.array([1,2,3,4,5])
array_2 = np.array([6,7,8,9,10])

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

result = [7,9,11,13,15]

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

result = array_1 + array_2

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

那么Swifter能做些什么呢?

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

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

https://dask.org/

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

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

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

如何写代码:

import pandas as pd
import swifter

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

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

下载使用Swifter:

https://github.com/jmcarpenter2/swifter

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

—End—

本文分享自微信公众号 - 量化投资与机器学习(Lhtz_Jqxx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券