pandas提升计算效率有哪些方法?
Admin 2021-08-21 群英技术资讯 899 次浏览
pandas提升计算效率有哪些方法?在Python中我们使用pandas来处理数据是非常方便的,但是一些新手可能对于提升pandas的计算效率的方法不是很了解,对此这篇文章就主要给大家介绍几个pandas提升计算效率的方法。
Pandas是为一次性处理整个行或列的矢量化操作而设计的,循环遍历每个单元格、行或列并不是它的设计用途。所以,在使用Pandas时,你应该考虑高度可并行化的矩阵运算。
尽量使用列号或者行号进行矩阵检索,避免使用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
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
iterrows()函数极大地提高了速度,但我们还远远没有完成。请始终记住,当使用为向量操作设计的库时,可能有一种方法可以在完全没有for循环的情况下最高效地完成任务。
为我们提供此功能的Pandas功能是 .apply() 函数。apply()函数接受另一个函数作为输入,并沿着DataFrame的轴(行、列等)应用它。在传递函数的这种情况下,lambda通常可以方便地将所有内容打包在一起。
关于pandas提升计算效率的方法就介绍到这,上述几种技巧大家在应用pandas时要注意,希望本文对大家学习pandas有帮助,想要了解更多提升pandas计算效率的方法,大家可以继续关注其他文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端 HTML 页面的接口。
这篇文章主要为大家介绍了pyspark自定义UDAF函数调用报错问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要介绍了python如何判断网络是否通?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Python语言作为一种比较“新”的编程语言,能在众多编程语言中脱颖而出,且与C语言、C++、Java等“元老级”编程语言并驾齐驱,无疑说明其具有诸多高级语言的优点,亦独具一格,拥有自己的特点。下面我们将简单说明Python语言的优点。为什么说Python对编程小白更友好呢?
这篇文章主要给大家分析python实现提取html文本的方法,小编觉得比较实用,对新手学习python有一定的帮助,因此分享给大家做个参考,感兴趣的朋友可以了解看看,接下来我们一起学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008