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

Jupyter Notebook中DataFrame图片无法显示,显示PIL对象如何解决?

解决Jupyter Notebook中DataFrame无法显示PIL图片的问题

直接将PIL图片对象存入DataFrame列时,Jupyter只会输出对象的字符串描述(如PIL.PngImagePlugin.PngImageFile image mode=RG.),无法自动渲染图片。以下是两种可行的解决方法:


方法一:替换为IPython可识别的Image对象

通过将PIL图片转为IPython.display.Image对象,让Jupyter自动渲染图片:

from IPython.display import Image
from io import BytesIO

images = []

for i in range(len(df)):
    mol = df.iloc[i]['Molecule']
    match = mol.GetSubstructMatch(ref_mol)
    # 生成PIL图片并转为字节流
    img = Draw.MolToImage(mol, highlightAtoms=match)
    buffer = BytesIO()
    img.save(buffer, format='PNG')
    # 转为IPython Image对象
    ipy_img = Image(data=buffer.getvalue())
    images.append(ipy_img)

df['Match_Image'] = images
display(df)

方法二:使用Pandas Styler渲染HTML图片标签

通过自定义渲染函数,将PIL图片转为base64编码的HTML图片标签,这种方法对表格样式的控制更灵活:

from io import BytesIO
import base64

# 辅助函数:将PIL图片转为base64字符串
def pil_to_base64(img):
    buffer = BytesIO()
    img.save(buffer, format='PNG')
    return base64.b64encode(buffer.getvalue()).decode()

# 生成PIL图片列
images = []
for i in range(len(df)):
    mol = df.iloc[i]['Molecule']
    match = mol.GetSubstructMatch(ref_mol)
    img = Draw.MolToImage(mol, highlightAtoms=match)
    images.append(img)

df['Match_Image'] = images

# 定义图片渲染函数
def render_img(val):
    b64_str = pil_to_base64(val)
    # 可调整width参数控制图片显示大小
    return f'<img src="data:image/png;base64,{b64_str}" width="100"/>'

# 应用样式并显示表格
display(df.style.format({'Match_Image': render_img}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:20:19