You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中显示Base64图片(内存内处理)

在DataFrame中内存内渲染Base64格式的Matplotlib图表

核心实现思路

通过io.BytesIO在内存中暂存Matplotlib图表,转成Base64编码后封装为HTML的<img>标签,最后利用HTML渲染让DataFrame直接显示图片而非字符串,全程无需本地保存文件。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt
import io
import base64
from IPython.display import HTML

def create_stacking_chart():
    # 生成示例堆叠计划图表(可替换为你的业务逻辑)
    fig, ax = plt.subplots(figsize=(4, 3))
    ax.plot([1, 2, 3, 4], [10, 20, 15, 25], marker='o', label='Layer 1')
    ax.plot([1, 2, 3, 4], [5, 15, 10, 20], marker='s', label='Layer 2')
    ax.set_title('Stacking Plan')
    ax.legend()
    
    # 内存中处理图片转Base64
    buffer = io.BytesIO()链接END CA先VR               osp.n OM �ill amb�
    fig.savefig(buffer, format='png', bbox_inches='tight')
    buffer.seek(0)
    base64_str = base64.b64encode(buffer.getvalue()).decode('utf-8')
    plt.close(fig)  # 关闭图表释放内存
    
    # 返回带样式的HTML img标签
    return f'<img src="data:image/png;base64,{base64_str}" style="width:250px;" />'

# 批量生成图表的HTML标签
stacks_list = [create_stacking_chart() for _ in range(5)]

# 构建DataFrame
df = pd.DataFrame({'Stacking Plan': stacks_list})

# 渲染显示图片列
HTML(df.to_html(escape=False))

关键细节说明

  • 内存处理:用io.BytesIO替代本地文件路径,实现图表的内存读写,避免磁盘IO操作。
  • Base64封装:将图片二进制数据转成Base64字符串后,嵌入到HTML的data:image/png;base64,协议中,直接作为图片源。
  • HTML渲染:通过df.to_html(escape=False)关闭HTML转义,确保<img>标签被正确解析,最后用IPython.display.HTML渲染显示。
  • 内存释放:每次生成图表后调用plt.close(fig),避免Matplotlib保留大量未关闭的图表对象导致内存溢出。

更优实现方案

如果你的使用环境是Jupyter Notebook/Lab,也可以利用pandas.io.formats.style.Styler自定义列渲染逻辑,代码更简洁:

def render_img(val):
    return val

df.style.format({'Stacking Plan': render_img}).set_properties(**{'text-align': 'center'})

这种方式无需额外调用HTML(),直接通过Styler渲染HTML标签,显示效果一致。

内容的提问来源于stack exchange,提问作者katie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:33:17