专栏首页Datawhale专栏Pandas常见的性能优化方法

Pandas常见的性能优化方法

Pandas是数据科学和数据竞赛中常见的库,我们使用Pandas可以进行快速读取数据、分析数据、构造特征。但Pandas在使用上有一些技巧和需要注意的地方,如果你没有合适的使用,那么Pandas可能运行速度非常慢。本文将整理一些Pandas使用技巧,主要是用来节约内存和提高代码速度。

1 数据读取与存取

Pandas中内置了众多的数据读取函数,可以读取众多的数据格式,最常见的就是read_csv函数从csv文件读取数据了。但read_csv在读取大文件时并不快,所以建议你使用read_csv读取一次原始文件,将dataframe存储为HDF或者feather格式。一般情况下HDF的读取比读取csv文件快几十倍,但HDF文件在大小上会稍微大一些。

建议1:尽可能的避免读取原始csv,使用hdf、feather或h5py格式文件加快文件读取;

在某些定长的字符数据的读取情况下,read_csv读取速度比codecs.readlines慢很多倍。同时如果你想要表格尽量占用较小的内存,可以在read_csv时就设置好每类的类型。

2 itertuples与iterrows

itertuplesiterrows都能实现按行进行迭代的操作,但在任何情况下itertuples都比iterrows快很多倍。

建议2:如果必须要要用iterrows,可以用itertuples来进行替换。

3 apply、transform和agg时尽量使用内置函数

在很多情况下会遇到groupby之后做一些统计值计算,而如果用内置函数的写法会快很多。

transform() 方法+自定义函数,用时1分57s

transform() 方法+内置方法,用时712ms

agg() 方法+自定义函数,用时1分2s

agg() 方法+内置方法,用时694ms

建议3:在grouby、agg和transform时尽量使用内置函数计算。

这一部分的统计数据来自: https://www.cnblogs.com/wkang/p/9794678.html

4 第三方库并行库

由于Pandas的一些操作都是单核的,往往浪费其他核的计算时间,因此有一些第三方库对此进行了改进:

  • modin:对读取和常见的操作进行并行;
  • swifter:对apply函数进行并行操作;

当然我之前也对此类库进行了尝试,在一些情况下会快一些,但还是不太稳定。在阿里云安全赛中我是用joblib库写的并行特征提取,比单核特征提取快60倍。

建议4:如果能并行就并行,用第三方库或者自己手写多核计算。

5 代码优化思路

在优化Pandas时可以参考如下操作的时间对比:

建议5:在优化的过程中可以按照自己需求进行优化代码,写代码尽量避免循环,尽量写能够向量化计算的代码,尽量写多核计算的代码。

Pandas官方也写了一篇性能优化的文章,非常值得阅读:

https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html

本文分享自微信公众号 - Datawhale(Datawhale)

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

原始发表时间:2019-09-15

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CSS画出一个爱心的案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <titl...

    botkenni
  • CSS和网络性能

    CSS对于呈现页面至关重要 - 在找到,下载和解析所有CSS之前,浏览器不会开始呈现 - 因此我们必须尽可能快地将其加载到用户的设备上。 关键路径上的任何延迟都...

    frontoldman
  • vscode常用插件

    快捷键:ctrl+alt+i 顶部注释,可定义作者、时间等信息,保存文件时自动更新最后修改时间。

    botkenni
  • css-in-js 探讨

    Web开发是需要掌握多种技术。我们习惯于与多种语言密切合作。而且,随着开发Web应用程序变得越来越普遍和差别细微化,我们经常寻找创造性的方法来弥合这些语言之间的...

    frontoldman
  • flexbox 伸缩布局

    row: 左-> 右 ,row-reverse: 右 -> 左 ,column:上 -> 下 ,column-reverse:下 -> 上

    frontoldman
  • 基于JS实现回到页面顶部的五种写法(从实现到增强)

      使用锚点链接是一种简单的返回顶部的功能实现。该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返回到该锚点的链接,用户点击该链接即可返回...

    botkenni
  • 如何在 IE6,7 下实现 white-space: pre-wrap;

    HTML 中的“空白符”包括空格 (space)、制表符 (tab)、换行符 (CR/LF) 三种。

    botkenni
  • pwa-之service worker 离线文件处理

    使用cache Api,预先缓存offline.html和offline.svg。当网络不通时,html请求走到cache方法里面去,然后响应的是缓存好的off...

    frontoldman
  • 最全的CSS浏览器兼容整理

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就 会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对...

    botkenni
  • VSCode拓展推荐(前端开发)

    Text-to-speech function is limited to 200 characters

    botkenni

扫码关注云+社区

领取腾讯云代金券