如何在Pandas调用XLSXWriter时传参避免AWS Lambda磁盘不足及弃用警告
你遇到的报错和警告问题核心是未显式指定xlsxwriter作为导出引擎,正确无警告的写法如下:
with pd.ExcelWriter( output, engine="xlsxwriter", engine_kwargs={"in_memory": True} ) as writer: # 后续写入DataFrame的逻辑保持不变 df.to_excel(writer, sheet_name="Sheet1")
为什么用
engine_kwargs传参会报参数不存在的错误
pandas的ExcelWriter默认会根据文件后缀自动选择导出引擎,如果你没有显式指定engine="xlsxwriter",默认大概率会调用openpyxl作为引擎,openpyxl本身没有in_memory、constant_memory这类xlsxwriter专属参数,自然会抛出参数不识别的错误。为什么
options参数能生效但报警告
pandas从1.3.0版本开始就废弃了options参数,统一要求用engine_kwargs传递对应导出引擎的专属配置,只要你继续使用options参数就会触发FutureWarning,只是旧版本pandas还保留了参数兼容性所以功能正常。为什么
constant_memory参数会导致文件内容丢失
xlsxwriter的constant_memory模式设计逻辑是逐行写入、不缓存全量数据到内存,但pandas调用xlsxwriter的逻辑是按整个Sheet批量写入数据,和该模式的运行逻辑不兼容,所以会出现内容缺失的问题,该参数本身就不适合配合pandas的ExcelWriter使用,解决磁盘占用问题请用in_memory参数。为什么未传参数时会出现磁盘占满
xlsxwriter默认运行模式会在生成Excel的过程中把临时缓存文件写入系统临时目录,AWS Lambda只有/tmp目录可写且总容量为512MB,如果你同时存在其他临时文件,或者xlsxwriter生成大文件的临时缓存峰值超过剩余磁盘空间,就会触发磁盘满的报错,开启in_memory参数后xlsxwriter会把所有临时缓存放在内存中,完全不写磁盘临时文件,自然不会出现磁盘占满的问题。
内容的提问来源于stack exchange,提问作者berimbolo

