• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    pandas提升计算效率的一些方法汇总

    前言

    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计算效率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Pandas数据分析的一些常用小技巧
    • python之pandas用法大全
    • Python pandas用法最全整理
    • Python Pandas常用函数方法总结
    • Python遍历pandas数据方法总结
    • Python pandas常用函数详解
    • Python使用Pandas库常见操作详解
    • 11个Python Pandas小技巧让你的工作更高效(附代码实例)
    • 详解pandas获取Dataframe元素值的几种方法
    • python数据分析必会的Pandas技巧汇总
    上一篇:Python一行代码实现自动发邮件功能
    下一篇:Pandas加速代码之避免使用for循环
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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