pandas100个骚操作:逆天!一行代码让 apply 速度飙到极致

简介: 本篇是pandas100个骚操作系列的第 13 篇:一行代码让 pandas 的 apply 速度飙到极致!

一. pandas提速的方法回顾


如果想要让pandas提速,东哥总结有两个方法:


1. 向量化


向量化是最优的方法,具体用法参考文章:pandas100个骚操作:再见 for 循环!速度提升315倍!

举个例子,我们将向量化定义为使用Numpy表示整个数组而不是元素的计算。下面有两个数组:

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


2. 并行化


其次是并行化,比如使用dask相信大家平时对pandas使用比较多的一个功能就是apply功能,使用自带函数或者自己写个函数,可以直接对dataframe进行变换,非常香!但由于pandas的apply只是将函数应用于dataframe的每一行,只调用当个处理器,如果行数非常多,那么将非常慢。但如果我们利用多处理器并行化,将dataframe数据框分成多个部分,然后将每个部分都送到处理器,最后再将各个部分组合拼成回单个dataframe,这就快多了!如何将这两个方法结合起来,对apply功能提速?

本次给大家分享一个神器 Swifter,可以自动让apply的运行速度达到最快,并且只需要一行代码!


二. Swifter介绍


Swifter是这样做的。1. 首先,检查apply的函数是否可以向量化,如果可以,就自动使用向量化的计算(最有效果)。2. 如果无法进行向量化,那就检查使用Dask进行并行处理或仅使用普通Pandasapply(仅使用单个内核)哪个更合理。并行化并不是一定要用的,因为并行处理的开销会使小型数据集的处理速度变慢,所以这个也需要根据数据集的大小情况具体分析。来看一张图。6.png


通过上图结果可以总结出:无论数据大小如何,使用向量化的结果几乎总是更好的,但如果无法做到向量化,那我们就退而求其次,通过并行让pandas速度最优(当数据集大小超过某个阈值的时候,红线和蓝线的交点)。太牛掰了,使用swifter可以直接为我们自动选择最佳的方式。三. 如何使用Swifter?Swifter的使用非常简单。

import pandas as pd
import swifter
df.swifter.apply(lambda x: x.sum() - x.min())

我们只需要引入swifter,然后简单的一行代码调用即可,赶快试一下这个神器!以上就是本次分享,如果喜欢东哥的骚操作,请给我点个赞和在看完整系列请看👉「pandas100个骚操作

相关文章
|
数据处理 Python
Pandas数据处理 | apply() 函数用法指南!
本文介绍一下关于 Pandas 中 apply() 函数的几个常见用法,apply() 函数的自由度较高,可以直接对 Series 或者 DataFrame 中元素进行逐元素遍历操作,方便且高效,具有类似于 Numpy 的特性。
|
3月前
|
Python
Pandas中的apply函数应用
Pandas中的apply函数应用
20 0
|
4月前
|
SQL 数据挖掘 数据处理
不再纠结,一文详解pandas中的map、apply、applymap、groupby、agg...
不再纠结,一文详解pandas中的map、apply、applymap、groupby、agg...
|
7月前
|
NoSQL Serverless Python
在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。
【5月更文挑战第2天】在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。方法一是直接赋值,如`df['C'] = 0`,创建新列C并初始化为0。方法二是应用函数,例如定义`add_column`函数计算A列和B列之和,然后使用`df.apply(add_column, axis=1)`,使C列存储每行A、B列的和。
297 0
|
数据采集 数据挖掘 索引
Pandas中第二好用的函数 | 优雅的apply
本文主要讲的是Pandas中第二好用的函数——apply。为什么说第二好用呢?做人嘛,最重要的就是谦虚,做函数也是一样的,而apply就是这样一个优雅而谦虚的函数。我们单独用一篇来为apply树碑立传,原因有二,一是因为apply函数极其灵活高效,甚至是重新定义了pandas的灵活,一旦熟练运用,在数据清洗和分析界可谓是“屠龙在手,天下我有”;二是apply概念相对晦涩,需要结合具体案例去咀嚼和实践。
202 0
Pandas中第二好用的函数 | 优雅的apply
|
数据处理 索引 Python
Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解
Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解
|
测试技术 索引 Python
Pandas的apply, map, transform介绍和性能测试
在这篇文章中,我们将通过一些示例讨论apply、agg、map和transform的预期用途。
272 0
Pandas的apply, map, transform介绍和性能测试
|
数据挖掘 数据处理 Python
python数据分析-pandas基础(4)-数据映射apply
apply函数的作用:就是用某个指定的函数f来依次作用于DataFrame或者Series的每个数据,可以指定按行处理和按列处理。
316 0
|
Python
一行代码让 pandas 的 apply 速度飙到极致!
前几天,分享了一篇文章,是关于替代pandas的工具vaex。vaex利用了内存映射的原理,所以比pandas能快上几百倍,但是vaex目前功能有限,所以暂时pandas还是无法撼动的。
一行代码让 pandas 的 apply 速度飙到极致!
|
Python
11 pandas DataFrame - 聚合之apply
=== 聚合 apply === 定义:apply是pandas库的一个重要函数,多和groupby函数一起使用,也可以直接用于DataFrame和Series对象。
1562 0