将超大表格存储为xlsx格式

问题描述

在使用pandas处理规模较大的数据时, 最后得到的DataFrame需要持久化为文件. 如果直接保存为.csv, .json这种存文本的文件, 最后得到的文件大小会很大.

如果最后得到的文件不是经常使用, 只是为了存储, 文件的大小就是我们要重点考虑的问题. 保存为存文本文件后压缩, 固然是一种方法, 但多了压缩以及使用时解压缩的步骤, 相当麻烦.

Excel表格对应的.xlsx格式存储的内容就是经过压缩的, 占用的体积会小很多. 因此保存为.xlsx格式是一个很好的选择.

要注意, .xlsx格式经过压缩后保存的体积小, 但读取时需要有对应的解压缩过程. 包含同样内容的.csv文件读取速度会比.xlsx快很多. 使用哪种格式, 要在速度和大小之间进行取舍.

但如果要保存的DataFrame很大, 直接使用.to_excel()方法会报如下的错误:

zipfile.LargeZipFile: Filesize would require ZIP64 extensions

问题原因

保存为.xlsx格式会调用ZipFile工具进行压缩. 当要存储的表格占用的原始大小超过4GB时, 需要在ZipFile工具初始化得时候指定allowZip64参数为True. 但默认的初始化时False, 因此会出现报错问题.

解决方法

手动指定保存使用的Writer.

writer = pd.ExcelWriter('your_file_name.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='Sheet1')
writer.book.use_zip64()

参考资料

最后更新于

这有帮助吗?