pandas提升计算效率的一些方法汇总


Posted in Python onMay 30, 2021

前言

Pandas是为一次性处理整个行或列的矢量化操作而设计的,循环遍历每个单元格、行或列并不是它的设计用途。所以,在使用Pandas时,你应该考虑高度可并行化的矩阵运算。

一、避免使用for循环

尽量使用列号或者行号进行矩阵检索,避免使用for循环。

1.1使用for循环

import os
import pandas as pd
import datetime

path = r'E:\科研文件\shiyan\LZQ\LZQ_all_sampledata.csv'
def read_csv(target_csv):
    target = pd.read_csv(path,header=None,sep=',')
    return target

start_time = datetime.datetime.now()
a = read_csv(path)
for i in range(10000):
    b = a.iloc[i]
end_time = datetime.datetime.now()

print(end_time-start_time)

耗时:0:00:02.455211

1.2使用行号检索

path = r'E:\科研文件\shiyan\LZQ\LZQ_all_sampledata.csv'

def read_csv(target_csv):
    target = pd.read_csv(path,header=None,sep=',')
    return target

start_time = datetime.datetime.now()

a = read_csv(path)

b = a.iloc[10000]

end_time = datetime.datetime.now()

print(end_time-start_time)

耗时:0:00:00.464756

二、使用for循环的条件下提高效率

2.0 如果必须使用for循环如何提高效率

我们可以做的最简单但非常有价值的加速是使用Pandas的内置 .iterrows() 函数。

在上一节中编写for循环时,我们使用了 range() 函数。然而,当我们在Python中对大范围的值进行循环时,生成器往往要快得多。

Pandas的 .iterrows() 函数在内部实现了一个生成器函数,该函数将在每次迭代中生成一行Dataframe。更准确地说,.iterrows() 为DataFrame中的每一行生成(index, Series)的对(元组)。这实际上与在原始Python中使用 enumerate() 之类的东西是一样的,但运行速度要快得多!

生成器(Generators)
生成器函数允许你声明一个行为类似迭代器的函数,也就是说,它可以在for循环中使用。这大大简化了代码,并且比简单的for循环更节省内存。

当你想要处理一个庞大的列表时,比如10亿个浮点数,问题就出现了。使用for循环,在内存中创建了大量的内存huge列表,并不是每个人都有无限的RAM来存储这样的东西!

生成器将创建元素时,仅在需要时将它们存储在内存中。一次一个。这意味着,如果必须创建10亿个浮点数,那么只能一次将它们存储在内存中。Python中的range()函数使用生成器来构建列表。

也就是说,如果你想多次迭代列表并且它足够小以适应内存,那么使用for循环和range函数会更好。这是因为每次访问list值时,生成器和range都会重新生成它们,而range是一个静态列表,并且内存中已存在整数以便快速访问。

2.1使用range

import os
import pandas as pd
import datetime

path = r'E:\科研文件\shiyan\LZQ\LZQ_all_sampledata.csv'

def read_csv(target_csv):
    target = pd.read_csv(path,header=None,sep=',')
    return target

start_time = datetime.datetime.now()

a = read_csv(path)

for data_row in range(a.shape[0]):
    b = a.iloc[data_row]

end_time = datetime.datetime.now()

print(end_time-start_time)

耗时:0:00:07.642816

2.2使用 .iterrows() 代替 range

import os
import pandas as pd
import datetime
path = r'E:\科研文件\shiyan\LZQ\LZQ_all_sampledata.csv'

def read_csv(target_csv):
    target = pd.read_csv(path,header=None,sep=',')
    return target

start_time = datetime.datetime.now()

a = read_csv(path)

for index,data_row in a.iterrows():
    b = data_row

end_time = datetime.datetime.now()

print(end_time-start_time)

耗时:0:00:03.513161

三、使用.apply

iterrows()函数极大地提高了速度,但我们还远远没有完成。请始终记住,当使用为向量操作设计的库时,可能有一种方法可以在完全没有for循环的情况下最高效地完成任务。

为我们提供此功能的Pandas功能是 .apply() 函数。apply()函数接受另一个函数作为输入,并沿着DataFrame的轴(行、列等)应用它。在传递函数的这种情况下,lambda通常可以方便地将所有内容打包在一起。

参考链接

四、其他方式

博客链接

总结

到此这篇关于pandas提升计算效率的文章就介绍到这了,更多相关pandas计算效率内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
python爬虫之urllib3的使用示例
Jul 09 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
python实现ROA算子边缘检测算法
Apr 05 Python
Python一行代码实现自动发邮件功能
深入解析NumPy中的Broadcasting广播机制
python必学知识之文件操作(建议收藏)
Python使用Kubernetes API访问集群
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
You might like
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python实现多并发访问网站功能示例
2017/06/19 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
对python函数签名的方法详解
2019/01/22 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
python pillow模块使用方法详解
2019/08/30 Python
python合并多个excel文件的示例
2020/09/23 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
flask框架中的cookie和session使用
2021/01/31 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
求职简历中自我评价
2014/01/28 职场文书
二年级小学生评语
2014/04/21 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
成绩单家长意见
2015/06/03 职场文书