我想在表格中显示图像样本和一些相关的文本信息。
可以在jupyter笔记本中执行此操作吗?
我尝试混合
pandas
和PIL
,但没有成功:
import pandas as pd
d = {
'band1': data.to_images(band_1[random_indices]),
'band2': data.to_images(band_2[random_indices]),
'is_iceberg': is_iceberg[random_indices]
}
pd.DataFrame(data=d)
输出为
即它显示了
__str__
图像,而不是图像本身。
如何克服?
这个怎么样?
我确信在
escape
中设置 to_html
可能存在一定的安全风险,但如果您知道数据并知道它来自哪里,那么希望不会那么糟糕。如果将 escape
更改为 True
它将不起作用,因为 html 被 pandas 转义了。这会在每一行中设置相同的图像,但可以轻松调整。
from IPython.core.display import display, HTML
import pandas as pd
data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="Pictures/Capture.PNG" alt="img">'
display(HTML(data.to_html(escape=False)))
[编辑]更好的选择是
from IPython.core.display import display, HTML
from PIL import Image
import cStringIO
import base64
import pandas as pd
img = Image.open("Pictures/Capture.PNG")
img_buffer = cStringIO.StringIO()
img.save(img_buffer, format="PNG")
imgStr = base64.b64encode(img_buffer.getvalue())
data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="data:image/png;base64,{0:s}">'
html_all = data.to_html(escape=False).format(imgStr)
display(HTML(html_all))
我尝试了Tasko Olevski的解决方案,但事实证明它是无效的。这是由于
cStringIo
的弃用。因此,我选择了 BytesIO
并使用 .decode()
对其进行解码以生成 imgStr
。
from IPython.core.display import display, HTML
from PIL import Image
from io import BytesIO # Modified
import base64
import pandas as pd
img = Image.open("Pictures/Capture.PNG")
img_buffer = BytesIO() # Modified
img.save(img_buffer, format="PNG")
imgStr = base64.b64encode(img_buffer.getvalue()).decode() # Modified
data = pd.DataFrame({"A":[1,2,3,4,5], "B":[10,20,30,40,50]})
data.loc[:,'img'] = '<img src="data:image/png;base64,{0:s}">'
html_all = data.to_html(escape=False).format(imgStr)
display(HTML(html_all))