#python#pandas# 读取很大的xlsx效率速度太慢

#python#pandas# 读取很大的xlsx效率速度太慢

2022 3月遇到这个问题,一般每个月的数据一个文件,大约130Mb 左右。

用于测试的典型文件 584k lines x 15 cols xlsx 文件 127 Mb, 数据都在 Sheet1. 14 columns 文本格式 和 1 column uint32.

因为xlsx 文件是 合作伙伴从他们的数据库系统导出的,我这是第三手拿到数据了。也很难去要求他们导出为csv. xlsx 好像还不是标准的 office xlsx,office 可以打开的。

测试结果大致如下,记录下。

环境:Win10, 4core cpu i5 2010, python3.9.x in wxpython portable pacakge.

methodtime
xlrd 1.2.0 open_workbookWall time: 8min 10s
xlrd3Wall time: 3min 17s
openpyxl 3.0.9 load_workbook read_only=True data_only=TrueWall time: 275 ms
openpyxl 3.0.9 load_workbook read_only=True data_only=True .values to dataframeWall time: 2min 21s
openpyxl 3.0.9 load_workbookWall time: 31min 46s
pandas 1.4.1 read_xlsx engine=openpyxlwall time: 4min 33s
modin[ray] pandas==1.4.0 ray>=1.4.0consider read pickle comparison, shall be very fast less **
xlsx_csv 0.1.0 to csv;pd.read_csv;os.remove(temp_csv)Wall time: 33.2 s
datatable 1.0.0 + xlrd==1.2.0Wall time: 4min 17s

** 因为 modin[ray] 还有bug 已经报告:只读出来 ~6k 行。
** 还有一个我没去研究解决的问题,就是读出来的 dataframe 是modin格式的,不能当成标准的pd.DataFrame 用. 很多功能还没有做到跟pandas一样。 如有哪位同学知道如何转换 modin pd.DataFrame 到 标准的pd.DataFrame.

xlsx => csv 两个工具的比较:

methodtime
xlsx2csv# 114386 x 15 13.1+ MB; Wall time: 11.6 s
xlsx_csv 0.1.0 to csv# 14386 x 15 13.1+ MB; Wall time: 2.5 s

xlsx_csv.xlsx2csv(fn, "Sheet1")
xlsx2csv.Xlsx2csv(fn).convert("e:/test.csv", sheetid=1)

@todo never try command shell tools like csvkit etc. maybe faster?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值