假设有一个包含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))
1
2
3
4
5
6
7
8
9
10
11
12
方法二:使用xlrd库
import xlrd
import timeit
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))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
方法三:使用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))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
运行以上代码,输出结果可能会有所不同,但是可以大致得出以下结论:
xlrd库读取数据性能最快,但是xlrd只支持xls格式,最新的xlsx格式只能使用其他方式。
openpyxl库最慢,和xlrd相反openpyxl只支持读取xlsx格式。
pandas库性能一般,但是同时支持xlsx和xls格式的excel,是最全面的。
下面对一些的Excel解析库的支持情况做了大概的对比:
库 读取xlsx文件 读取xls文件 写入xlsx文件 写入xls文件 数据处理功能 速度
从上表可以看出,这些库的支持情况各有不同。
如果需要读写Excel xlsx格式的文件并进行复杂的数据处理操作,建议选择pandas库。
如果只需要读取Excel xls格式的文件,可以使用xlrd库。
如果只需要写入Excel xlsx格式的文件,并且对速度要求较高,可以选择xlsxwriter库。
注: pyexcel和pyxlsb在读取Excel文件时,使用了比较特殊的方法,即使用了内存映射文件(Memory Mapped Files)的技术,可以将文件映射到内存中,然后通过内存直接访问文件内容,从而避免了大量的IO操作,提高了读取速度。同时,这种方法还可以避免一些内存限制,可以处理较大的文件。
相比之下,其他库(如pandas、xlrd、openpyxl等)使用的是常规的读取文件方式,需要将整个文件读入内存中,再进行解析处理,因此可能会受到内存限制的影响,同时IO操作也会比较频繁,速度相对较慢。
————————————————
版权声明:本文为CSDN博主「时光不写代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44649870/article/details/130426854