发布网友
共1个回答
热心网友
好消息传来,自pandas 2.2版本以后,calamine引擎的出现为处理大型xlsx文件的效率问题带来了希望。升级到2.2.1版本后,我发现了一个新的引擎选项,特别适用于xlsx文件读取。尽管数据规模大约在200万至800万行,10几列左右,之前使用openpyxl的load_workbook进行只读操作并转存为csv,过程较为繁琐,耗时几十秒尚可接受。
然而,xlsx_csv虽然读取速度较快,但不支持自定义分隔符为\t,这在文本字段包含逗号的情况下会带来困扰。我仍在寻找解决方案,特别是面对大量文本数据和批量处理的需求。
回溯到2022年3月,我曾遇到读取大文件(每份约130Mb)的问题,尤其是处理一个典型文件,584k行,15列,127Mb大小的xlsx,数据集中在Sheet1,14列为文本格式,1列为uint32。由于数据来源复杂,从合作伙伴的数据库导出后,xlsx格式并非标准,且无法直接要求他们转为csv。
在测试中,我记录了不同方法的执行时间:使用xlrd 1.2.0需8分钟10秒,xlrd3稍有改善,3分钟17秒。openpyxl的load_workbook在只读和data_only=True的情况下,虽然初始读取速度很快,但后续转换为dataframe会明显变慢。pandas 1.4.1的read_xlsx engine=openpyxl耗时4分钟33秒。modin[ray]的读取速度理论上更快,但由于bug,只读部分数据,且输出格式为modin格式,需要额外转换。xlsx到csv的工具xlsx_csv和xlsx2csv中,xlsx2csv的转换时间更短,分别为11.6秒和2.5秒。
尽管有一些工具可供选择,但寻找最佳解决方案的过程仍在继续,尤其是对于modin DataFrame的转换,如果能将其转换为标准的pd.DataFrame,将大大提高处理效率。