背景
有工作需要解析Excel文件数据,需要取Excel文件中一些指定单元格(指定行列)的数据内容。因为Excel文件目前区分为xls
与xlsx
。全能读写包xlwings
虽然能兼顾两种格式,功能齐全,但是太重,操作比较慢,而且必须主动调用关掉Excel文件调用,否则将一直挂在后台。考虑到更轻便的使用,所以分别使用了xlrd
读xls
,使用openpyxl
读xlsx
。但是维护两份代码不太方便,考虑到pandas可以直接读excel
两种格式(底层同样是调用对应的包,只是上层做了统一封装),感觉可以更方便些。
但是最终用下来,在单纯取数据方面,dataframe
格式的性能并不占优势。
测试方案
测试平台:win10 21H1
配置:AMD 3700X 8核16线程 4.14GHz,32G DDR4 3200MHz
数据文件:4880行,11列的Excel文件。xls格式1100kb,xlsx格式390kb。
随机重复读指定单元格,比较读取耗时。
测试结果
提取数据耗时:
- pands - iat,13us
- pands - iloc,14.4us
- xlrd - sheet.cell,0.447us
- openpyxl - sheet.cell,0.509us
由测试数据可知,pandas的dataframe
取数据性能远远低于直接从Excel取数据。