在 Pandas 数据框中显示图像(url)

数据挖掘 Python 熊猫 可视化
2021-10-08 11:23:45

我想直接从熊猫数据框中的 url 链接显示图像(主要是 jpg 和 png 格式)。想象一下,我已经有以下数据框:

id image_url
1  http://www.nstravel.ro/wp-content/uploads/2015/02/germany-profile_6023_600x450.jpg
2  https://www.nh-hotels.com/multimedia/images/cityscape-of-berlin_retoque_600x458-tcm41-132903-32.jpg
3  https://www.scandichotels.com/imagevault/publishedmedia/8q33xlshjl4o9d5ftp3r/germany-berlin-berliner-dom-cathedral-in-the-eveni.jpg

我希望将实际图像显示在另一列中(适当调整大小以适合)。

我知道我可以做不同的事情,例如不使用 pandas 并使用 matplotlib 使用网格,但为了便于说明和演示,我更愿意在表格(数据框)中显示它。

我找到了这些解决方案:solution1solution2这些建议的解决方案虽然看起来非常相关,但对我不起作用。即使我尝试使用本地磁盘中的图像,但我使用解决方案2得到了这个:

在此处输入图像描述

Python:3.6.5,熊猫:0.23.0,Jupyter:4.4.0

谢谢!

2个回答

实际上解决方案2有效;我只需要多一点耐心。我把它贴在这里,以防有人遇到困难,比如我,让它工作:

import pandas as pd
from IPython.display import Image, HTML

def path_to_image_html(path):
    '''
     This function essentially convert the image url to 
     '<img src="'+ path + '"/>' format. And one can put any
     formatting adjustments to control the height, aspect ratio, size etc.
     within as in the below example. 
    '''

    return '<img src="'+ path + '" style=max-height:124px;"/>'

HTML(df.to_html(escape=False ,formatters=dict(column_name_with_image_links=path_to_image_html)))

请注意,df是您的实际数据框名称,column_name_with_image_links是包含所有图像 url 的列名称,path_to_image_html是上述函数。

img作为使用格式化程序的上述解决方案的替代方案,还可以直接在 DataFrame中创建带有 HTML 标记的列。另一个重要的注意事项是,长 URL 可以被字符串缩短器吃掉(内容被替换为...)。为了避免这种情况,可以使用pd.option_context()withdisplay.max_colwidth设置适当的值。

上面提到的变成了类似的东西:

import pandas as pd
from IPython.display import Image, HTML

df['img_html'] = df['column_name_with_image_links']\
    .str.replace(
        '(.*)', 
        '<img src="\\1" style="max-height:124px;"></img>'
    )
with pd.option_context('display.max_colwidth', 10000):
    HTML(df.to_html(escape=False))