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

猜你喜欢

转载自blog.csdn.net/weixin_44649870/article/details/130426854
今日推荐