-
假设有一个包含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
-
运行以上代码,输出结果可能会有所不同,但是可以大致得出以下结论:
- xlrd库读取数据性能最快,但是xlrd只支持xls格式,最新的xlsx格式只能使用其他方式。
- openpyxl库最慢,和xlrd相反openpyxl只支持读取xlsx格式。
- pandas库性能一般,但是同时支持xlsx和xls格式的excel,是最全面的。
-
下面对一些的Excel解析库的支持情况做了大概的对比:
库 读取xlsx文件 读取xls文件 写入xlsx文件 写入xls文件 数据处理功能 速度 pandas 是 是 是 是 最全面 一般 xlrd 否 是 否 是 简单 快 openpyxl 是 否 是 否 简单 慢 xlsxwriter 否 否 是 否 简单 最快 xlwt 否 否 否 是 简单 最快 xlutils 否 是 否 是 简单 一般 pyexcel 是 是 是 是 简单 未知 pyxlsb 否 是 否 是 简单 未知 pywin32 是 是 是 是 简单 未知 -
从上表可以看出,这些库的支持情况各有不同。
- 如果需要读写Excel xlsx格式的文件并进行复杂的数据处理操作,建议选择pandas库。
- 如果只需要读取Excel xls格式的文件,可以使用xlrd库。
- 如果只需要写入Excel xlsx格式的文件,并且对速度要求较高,可以选择xlsxwriter库。
注: pyexcel和pyxlsb在读取Excel文件时,使用了比较特殊的方法,即使用了内存映射文件(Memory Mapped Files)的技术,可以将文件映射到内存中,然后通过内存直接访问文件内容,从而避免了大量的IO操作,提高了读取速度。同时,这种方法还可以避免一些内存限制,可以处理较大的文件。
相比之下,其他库(如pandas、xlrd、openpyxl等)使用的是常规的读取文件方式,需要将整个文件读入内存中,再进行解析处理,因此可能会受到内存限制的影响,同时IO操作也会比较频繁,速度相对较慢。