优化自定义函数_Pandas常见的性能优化方法

文章来源于Datawhale ,作者阿水

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


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

2223a18072164eb612ac9a61ad3c63f8.png

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

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

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

ac6ed38cfcfbcf01cb9551d280a06b3e.png

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

b0dee1d76662bbc7b0a95c69aaf5d8dc.png

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

f9beadcc768d3c02a7c4a0af969d207d.png

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

4b239edd04dd83ecdb77bf8449785cb8.png

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

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

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

4 第三方库并行库

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

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

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

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

5 代码优化思路

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

76c8eac6b377eac4431c9732332a8c29.png

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

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

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

最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm cant open file_PyCharm

1.创建项目PyCharm是一种Python IDE.PyCharm的功能到底有多强大,我也说不清楚,今天只是介绍一下关于Pycharm创建项目的问题.✦ PyCharm可以将一个文件夹作为工程(或项目)进行打开.如图1所示,先创建两个文件夹(pyc1和pyc2),在文件夹…

adminlte支持html5吗,spring boot:用adminlte做前端

标签(空格分隔): sringboot adminlte thymeleafspring boot 和 adminlte没有紧密的联系,只是最近在做的一个东西用spring boot做后端用adminlte做前端,所以就放到spring boot系列里面讲。架构原理adminlte只是一个库,说不上什么框…

如何通过示例使用Java中的Exchanger

大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch , CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义, …

python里写在文件的指定行_python文件操作如何写在指定的行

常常在操作文件时我们只想在某一行的插入信息,可以先将文件读入列表中,利用列表的下标插入文本,之后再重新写入文件。但是弊端是,如果文件量太大列表的性能可能不是很高。python代码:#codingutf-8lines[]fopen("d…

外星人跑深度学习_上海港汇外星人店,51M2020开光追和DLSS2.0畅玩《赛博朋克2077》...

上海外星人港汇恒隆广场店是外星人布局上海的首家3.0店面,坐落在繁华的徐家汇商圈港汇恒隆广场南座6楼。门店传承了外星人高端高品质,以服务客户为宗旨,立足上海,辐射周边,服务所有外星人客户。近日,让全球…

python flask html模板,python flask web开发实战 Jinja2模板

templates/index.htmlHello World!templates/user.htmlHello, {{ name }}!渲染模板:from flask import Flask,render_templateapp.route(/)def index():return render_template(index.html)app.route(/user/)def user(name):return render_template(user.html, name…

gwt前台开发_为GWT设置开发环境

gwt前台开发介绍 这是旨在用Java开发跨平台移动应用程序的系列文章的一部分 。 在此博客文章中,我们将了解GWT是什么,并为GWT设置开发环境。 GWT是一个开源开发工具包,用于开发基于浏览器的复杂Ajax应用程序。 使用GWT,您可以用J…

linux 释放进程res_linux内存查看及释放

查看内存常用的查看内存工具有:top,ps,free,/proc/meminfo,/proc/$PID/status等,一般都指定了虚拟内存占用情况,但ps或/proc/$PID/status中RSS或RSZ指定的是实际内存大小。1)freeroot:~# freeto…

js读取外部json指定字段值完整代码_前端工程化 剖析npm的包管理机制(完整版)...

导读 现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区,理解其内部机制非常有利于加深我们对模块开发的理解、各项前端工程化的配置以加快我们排查问题(相信不少同学收到过各种依赖…

计算机专业带给我们的启示,一次电脑网络调查带给我的启示

一次电脑网络调查带给我的启示当今世界,鲜有人不会上网。而许多孩子,也迷上了电脑。就此,我对周围的12个朋友做了调查。其中3人上网玩QQ,8人玩摩尔庄园,仅1人玩单机游戏。很显然,网络已深入孩子们的生活。做…

Apache Derby数据库JVM安全策略

抽象 我已经发布了许多有关Derby的博客: Derby数据库备份 同一主机上的多个Derby网络服务器 Apache Derby数据库用户和权限 与Maven和内存中Derby数据库的集成测试 这本不打算是一个系列。 但是多年来,我越来越多地使用Derby。 我开始使用Derby作为…

大师兄科研网vasp_怎样知道一名研究生有没有科研潜力?

原答案回答在这里了。怎么知道一名研究生有没有科研潜力?​www.zhihu.com大家熟悉的“员工执行力”这个词,其实是个伪命题,因为员工的执行力=领导的领导能力,领导方法得当,每个人都有很强的执行力。那么“学…

西交计算机专业912一样吗,西安交大912(总分404 专业课133分)经验总结

2019年西交912计算机基础经验总结(总分404 政治:68 英语二:84 数学二:119 专业课:133)先说一下个人情况吧。本人2017年毕业于西安电子科技大学计算机科学与技术专业,毕业以后就职于一家国企,奈何不安分&…

分行打印列表python_#python版一行内容分行输出

python版一行内容分行输出 1.[代码][Python]代码236091543 #python版一行内容分行输出 #依山居 18:14 2015/11/4 #题目来源 http://www.bathome.net/thread-1454-1-1.html a="aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九" """ 分行输出为: abcdef…

机箱硬盘指示灯不亮_安钛克DF600 FLUX机箱:FLUX平台第一款机箱,为全民电竞热“降温”...

随着夏天的到来,电脑对散热的要求越来越高,特别是对于希望游戏的电竞玩家,不久前China Joy全球电竞大会的落幕,“全民电竞”这个概念再一次深入人心,而一名电脑主机电竞玩家,势必需要一款散热效果更好的机箱…

java ee maven_针对新手的Java EE7和Maven项目–第7部分

java ee maven从前面的部分恢复 第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5 部分 , 第6部分 在上一篇文章(第6章)中,我们发现了如何使用Arquillian和Wildfly 8.1进行JPA2域模…

法在计算机课程中的应用,任务驱动法在计算机办公课程中的应用

摘 要:一体化教学模式中的任务驱动法是建立在建构主义教育理论基础上的一种教学法。笔者结合任务驱动法在Word2010教学中的实施过程,对如何应用任务驱动法展开论述。关键词:任务驱动法 计算机办公课程 具体应用任务驱动法就是在教学过程中&am…

链表node中保存的是什么_Redis源码解析一 --链表结构

Redis源码剖析—链表结构1. redis中的链表在redis中链表的应用非常广泛,例如列表键的底层实现之一就是链表。而且,在redis中的链表结构被实现成为双向链表,因此,在头部和尾部进行的操作就会非常快。通过列表键的命令感受一下双向链…

python数据分析方法和命令_《利用Python进行数据分析》 —— (1)

《利用Python进行数据分析》 —— (1) Python的学习需要自主探索各种类型,函数和方法的文档。 2.1 Python解释器 在IPython(Jupyter Qtconsole)上,可以通过%run命令执行文件中的代码 In [16]: %run hellow.py 1,2,3 10…

JDK 15中的确切绝对整数

JDK 15 Early Access Build b18向Math和StrictMath类引入了新方法,这些方法将在提供的值超出方法所支持的范围时抛出ArithmeticException ,而不会发生溢出。 这些方法为Java中的“绝对值”概念带来了Math.addExact , Math.subtractExact和Mat…