pandas、xlrd、openpyxl读取Excel性能对比

news/2024/7/21 4:20:06 标签: pandas, excel, python
  • 假设有一个包含1000行、30列数据的Excel文件,我们可以使用以下代码对这三种方法进行性能测试。

  • 方法一:使用Pandas库

    python">import pandas as pd
    import timeit
    
    excel_file = 'example.xlsx'
    sheet_name = 'Sheet1'
    
    def pandas_method():
        data_frame = pd.read_excel(excel_file, sheet_name=sheet_name)
        data_dict = data_frame.to_dict(orient='records')
    
    print('Pandas method:', timeit.timeit(pandas_method, number=100))
    # Pandas method: 24.16708559
    
  • 方法二:使用xlrd库

    python">import xlrd
    import timeit
    # 这里要注意,因为xlrd只支持xls格式的文件,等待数据
    excel_file = 'example.xls'
    sheet_name = 'Sheet1'
    
    def xlrd_method():
        workbook = xlrd.open_workbook(excel_file)
        sheet = workbook.sheet_by_name(sheet_name)
        data_dict = []
        for row in range(1, sheet.nrows):
            row_data = {}
            for col in range(sheet.ncols):
                cell_value = sheet.cell_value(row, col)
                row_data[sheet.cell_value(0, col)] = cell_value
            data_dict.append(row_data)
    
    print('xlrd method:', timeit.timeit(xlrd_method, number=100))
    # xlrd method: 7.141338280000014
    
  • 方法三:使用openpyxl库

    python">from openpyxl import load_workbook
    import timeit
    
    excel_file = 'example.xlsx'
    sheet_name = 'Sheet1'
    
    def openpyxl_method():
        workbook = load_workbook(filename=excel_file)
        worksheet = workbook[sheet_name]
        data_dict = []
        for row in worksheet.iter_rows(min_row=2, max_col=worksheet.max_column, values_only=True):
            row_data = {}
            for i, value in enumerate(row):
                row_data[worksheet.cell(row=1, column=i+1).value] = value
            data_dict.append(row_data)
    
    print('openpyxl method:', timeit.timeit(openpyxl_method, number=100))
    # openpyxl method: 27.848255710000103
    
  • 运行以上代码,输出结果可能会有所不同,但是可以大致得出以下结论:

    1. xlrd库读取数据性能最快,但是xlrd只支持xls格式,最新的xlsx格式只能使用其他方式。
    2. openpyxl库最慢,和xlrd相反openpyxl只支持读取xlsx格式。
    3. pandas库性能一般,但是同时支持xlsx和xls格式的excel,是最全面的。
  • 下面对一些的Excel解析库的支持情况做了大概的对比:

    读取xlsx文件读取xls文件写入xlsx文件写入xls文件数据处理功能速度
    pandas最全面一般
    xlrd简单
    openpyxl简单
    xlsxwriter简单最快
    xlwt简单最快
    xlutils简单一般
    pyexcel简单未知
    pyxlsb简单未知
    pywin32简单未知
  • 从上表可以看出,这些库的支持情况各有不同。

    1. 如果需要读写Excel xlsx格式的文件并进行复杂的数据处理操作,建议选择pandas库。
    2. 如果只需要读取Excel xls格式的文件,可以使用xlrd库。
    3. 如果只需要写入Excel xlsx格式的文件,并且对速度要求较高,可以选择xlsxwriter库。

注: pyexcel和pyxlsb在读取Excel文件时,使用了比较特殊的方法,即使用了内存映射文件(Memory Mapped Files)的技术,可以将文件映射到内存中,然后通过内存直接访问文件内容,从而避免了大量的IO操作,提高了读取速度。同时,这种方法还可以避免一些内存限制,可以处理较大的文件。
相比之下,其他库(如pandas、xlrd、openpyxl等)使用的是常规的读取文件方式,需要将整个文件读入内存中,再进行解析处理,因此可能会受到内存限制的影响,同时IO操作也会比较频繁,速度相对较慢。


http://www.niftyadmin.cn/n/272606.html

相关文章

nginx配置sh脚本远程执行一键安装

背景 本地多机重复操作某些shell指令,分步执行,很耗费时间, 需要远程一键部署,傻瓜化运维,更为通用安装。 即参考docker通用安装 sudo curl https://get.docker.com | sh - # sudo python3 -m pip install docker-co…

实时聊天对客户服务和销售推力有多大?(一)

实时聊天对于跨境电商客户服务来说,已经是不可或缺的存在。那么,他对于跨境电商增加销售量,改进客户服务有什么好处呢?接着往下看。 实时聊天对客户服务的好处 1.实时聊天可让您提供令人愉快的支持 将实时聊天作为客户支持产品…

【测试开发】单元测试、基准测试和性能分析(以 Go testing 为例)

一、为什么需要测试🤔️ 你写不出 bug-free 的代码。你认为自己写出了 bug-free 的代码,但它在你意想不到的地方出错了。你觉得自己写出了永不出错的代码,但它的性能十分糟糕。 二、在开发过程中做好测试(理想情况下)…

逐函数详细讲解ORB_SLAM2算法和C++代码|Tracking.cpp|StereoInitialization|1-5

在ORB-SLAM2算法中,StereoInitialization()函数是用于对双目相机进行立体视觉初始化。在立体视觉SLAM中,初始化是确定初始关键帧、地图点以及相机位姿的关键步骤。这个函数在成功初始化后,将SLAM系统状态设置为OK,为后续的跟踪、定位和地图构建做好准备。以下是这个函数中的…

Faster JSON - orjson | Python 主题

前言 JSON使用的越多就越可能遇到JSON编码或者解码的瓶颈,Python的内置json库虽然也很好用但是也有很多其他更快的JSON库可以使用,但是具体选择哪一个或者哪一种需要根据具体情况,没有一种标准的规则衡量哪一种JSON最好或者最快,…

机器人工程师与孔乙己文学

本文内容严格按创作模板发布: 孔乙已是鲁迅笔下人物,穷困流倒还穿着象征读书人的长衫,迁腐、麻木。最近,大家自我调佩是“当代孔乙己”,学历成为思想负担,找工作时高不成低不就。你可以从以下几个角度说说…

【python基础语法四】python函数和函数相关概念

函数 含义 概念:功能 (包裹一部分代码 实现某一个功能 达成某一个目的)特点:可以反复调用,提高代码的复用性,提高开发效率,便于维护管理 函数基本格式 """ # 定义一个函数 def 函数名():code1code # 调用函数 函数名() """ # 定义函数 def f…

Linux-修改虚拟机为静态IP

一般情况下,NAT网络连接模式下,DHCP动态分配IP地址的,但这样在每次访问连接Linux虚拟机时,都要先去查询ip地址,很麻烦,干脆就将虚拟机IP地址写死,也就是设置为静态的(static&#xf…