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

  • 假设有一个包含1000行、30列数据的Excel文件,我们可以使用以下代码对这三种方法进行性能测试。

  • 方法一:使用Pandas库

    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库

    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库

    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操作也会比较频繁,速度相对较慢。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光不写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值