使用dataframe_image导出DataFrame为PNG报错,求解决方法
修复DataFrame导出PNG时的
SyntaxError: not a PNG file错误 我之前也碰到过一模一样的问题,这个错误看起来是说文件不是PNG,但实际上大概率是导出过程中的路径、样式渲染或者依赖问题导致的,咱们一步步来排查修复:
1. 优先检查路径转义问题
你代码里的路径用了单个反斜杠\,在Python字符串里这是转义字符,很可能导致生成的文件路径不正确,最终生成的文件内容损坏,被识别为非PNG文件。
把路径改成双反斜杠或者原始字符串:
# 方案1:双反斜杠 dfi.export(fig, f'{dirG}\\moneda {comitente}.png') # 方案2:原始字符串(在字符串前加r) dfi.export(fig, rf'{dirG}\moneda {comitente}.png')
2. 简化样式对象,排查渲染异常
有时候复杂的样式设置可能会导致dataframe_image的渲染引擎出错。先把样式简化到最小,测试是否能正常导出:
def imprimir_fig(): fig = pd.DataFrame(out) fig.columns=['Tipo','Valorizada'] # 先只保留最基础的样式 fig_styler = fig.style.hide_index() dfi.export(fig_styler, rf'{dirG}\moneda {comitente}.png') return fig_styler imprimir_fig()
如果这个简化版能成功,再逐步加回set_properties、set_table_styles这些样式,找到可能出问题的设置项。
3. 重新安装/更新dataframe_image依赖
这个库依赖webkit渲染工具,可能是依赖损坏或者版本兼容问题导致的。尝试重新安装并升级:
pip uninstall dataframe_image -y pip install dataframe_image --upgrade
替代方案:用imgkit转换HTML为PNG
如果上面的方法都不行,可以换个思路:先把Styler对象转成HTML,再用imgkit转换成PNG:
import imgkit import pandas as pd def imprimir_fig(): fig = pd.DataFrame(out) pd.set_option('display.colheader_justify', 'center') fig.columns=['Tipo','Valorizada'] fig_styler = fig.style.hide_index() fig_styler = fig_styler.set_properties(**{'text-align': 'center'}) fig_styler = fig_styler.set_table_styles([dict(selector = 'th', props=[('text-align', 'center')])]) # 把样式对象转为HTML字符串 html_content = fig_styler.to_html() # 配置wkhtmltopdf路径(如果没加到系统环境变量的话) config = imgkit.config(wkhtmltoimage=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage.exe') # 导出为PNG imgkit.from_string(html_content, rf'{dirG}\moneda {comitente}.png', config=config) return fig_styler imprimir_fig()
注意:使用这个方案需要先安装依赖:
pip install imgkit
另外还要下载wkhtmltopdf安装包,安装后把它的bin目录加到系统环境变量,或者在代码里指定路径。
内容的提问来源于stack exchange,提问作者Agustín Ehrman
相关产品推荐
相关产品推荐

