专栏首页ATYUN订阅号用 Swifter 大幅提高 Pandas 性能

用 Swifter 大幅提高 Pandas 性能

编辑 | sunlei 发布 | ATYUN订阅号

假如在此刻,您已经将数据全部加载到panda的数据框架中,准备好进行一些探索性分析,但首先,您需要创建一些附加功能。自然地,您将转向apply函数。Apply很好,因为它使在数据的所有行上使用函数变得很容易,你设置好一切,运行你的代码,然后…

等待……

事实证明,处理大型数据集的每一行可能需要一段时间。值得庆幸的是,有一个非常简单的解决方案可以为您节省大量时间。

Swifter

Swifter是一个库,它“以最快的可用方式将任何函数应用到pandas数据帧或序列中”,以了解我们首先需要讨论的几个原则。

矢量化

对于这个用例,我们将把矢量化定义为使用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

关键是尽可能使用向量化操作。

并行处理

几乎所有的计算机都有多个处理器。这意味着您可以很容易地通过利用它们来提高代码的速度。因为apply只是将一个函数应用到数据帧的每一行,所以并行化很简单。您可以将数据帧分割成多个块,将每个块提供给它的处理器,然后在最后将这些块合并回单个数据帧。

The Magic

来源https://github.com/jmcarpenter2/swifter

Swifter的做法是

  1. 检查你的函数是否可以向量化,如果可以,就使用向量化计算。
  2. 如果无法进行矢量化,请检查使用Dask进行并行处理还是只使用vanilla pandas apply(仅使用单个核)最有意义。并行处理的开销会使小数据集的处理速度变慢。

这一切都很好地显示在上图中。可以看到,无论数据大小如何,使用向量化总是更好的。如果这是不可能的,你可以从vanilla panda那里得到最好的速度,直到你的数据足够大。一旦超过大小阈值,并行处理就最有意义。

您可以看到“SwiftApply”行是Swifter会做的,它会自动为您选择最佳选项。

也许你会问,你是如何利用这个魔法的?其实这是一件容易的事。

import pandas as pd
import swifter

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

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

现在,你可以花更少的时间盯着进度条,更多的时间做科学这改变了生活。不过,你可能没那么多时间玩游戏。

GitHub:

https://github.com/jmcarpenter2/swifter

原文链接:

https://towardsdatascience.com/one-word-of-code-to-stop-using-pandas-so-slowly-793e0a81343c

本文分享自微信公众号 - ATYUN订阅号(atyun_com),作者:关注人工智能的

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用统计方法,辨别和处理数据中的异常值

    在建模时,清理数据样本非常重要,这样做可以确保观察结果充分代表问题。有时,数据集可能包含超出预期范围之外的极端值。这通常被称为异常值,通过理解甚至去除这些异常值...

    AiTechYun
  • Uber开源Manifold,用于调试AI模型的可视工具

    为了减轻工作量,Uber在内部开发了Manifold,这是一种与模型无关的视觉工具,它可以显示特征分布的差异(即所观察到的现象的可测量属性)。它已帮助各种产品团...

    AiTechYun
  • 数据虚拟化:为人工智能和机器学习解锁数据

    在可靠性、准确性和性能方面,人工智能和机器学习都严重依赖于大型设备。因为数据池越大,你就越能对模型进行训练。这就是为什么重要的数据平台能够高效地处理不同的数据流...

    AiTechYun
  • 如何将私有云模型拓展到混合云?

    私有云是进入混合云的极佳跳板。企业要从私有云模型迁移到混合云需要设定具体的目标。 当企业开始利用服务器虚拟化来提高效率和降低成本,许多公司会很快发现他们正在支持...

    静一
  • 大规模数据集成: Linked Data

    在本系列的前两篇文章(“ 使用 RDF 创建数据网络 ” 和 “ 使用 SPARQL 查询 RDF 数据 ”)中,您了解了资源描述框架和 SPARQL 协议和 ...

    CSDN技术头条
  • 那些年我们吹过的牛逼——人工智能

    人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术...

    企鹅号小编
  • JavaScript第十四弹——ES6(三)数组的扩展

    Hello,小伙伴们,周末愉快呀,今天延续前天的话题,上次说了ES6对字符串的扩展,今天我们来谈谈约定好的数组的扩展吧~~

    萌兔IT
  • 【干货】银联智策:大数据驱动的个性化财富管理

    大数据文摘
  • 报告 | 2016年8月大数据投融资分析报告 ——医疗大数据促进中国医疗体制改革

    根据不完全统计,2016年8月大数据行业共计发生33起投融资事件,相比上个月环比增长57%,其中已披露具体金额的有29起,涉及金额13.9亿人民币。 图表 1...

    数据猿
  • IT运维支持如何转化为服务

    关于IT服务能力的介绍,本期标题中主动式、可量化、构建IT运营服务三个关键词概括了我对IT服务能力的理解,其中IT运营服务在上一篇《IT运营转型中的ITOM》作...

    彭华盛

扫码关注云+社区

领取腾讯云代金券