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
相关产品推荐
相关产品推荐

