Pandas DataFrame中的HTML格式

时间:2016-11-21 16:08:31

标签: python pandas ipython-notebook

在IPython笔记本中使用它时,有没有办法在Pandas DataFrame中添加格式化列?我想添加一个数据网址<img>并将其显示在单元格中。

2 个答案:

答案 0 :(得分:3)

如果您的src网址过长,大熊猫会在显示它时将其截断。您需要增加最大列宽以适应它。

跟踪当前的最大列宽

current_max_colwidth = pd.get_option('display.max_colwidth')
print(current_max_colwidth)

50

将选项设置为大

pd.set_option('display.max_colwidth', 1000)

导入HTML显示功能

from IPython.display import HTML

将数据框to_html与参数escape=False

一起使用
HTML(
    pd.DataFrame([
            """<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""",
            """<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""",
            """<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">"""
        ]).to_html(escape=False))

enter image description here

重新设置选项

pd.set_option('display.max_colwidth', current_max_colwidth)

将其整理成一个整洁的功能

def my_to_html(df):
    current_max_colwidth = pd.get_option('display.max_colwidth')
    pd.set_option('display.max_colwidth', 1000)
    from IPython.display import HTML
    my_html = HTML(df.to_html(escape=False))
    pd.set_option('display.max_colwidth', current_max_colwidth)
    return my_html

df = pd.DataFrame([
        """<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""",
        """<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""",
        """<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">"""
    ])

my_to_html(df)

答案 1 :(得分:1)

以下是一个例子:

from IPython.display import HTML
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
# this file is in the same folder as the notebook I'm using on my drive
df['image'] = 'so-logo.png'
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '')
HTML(df.to_html(escape=False))

Simple result

或者,您可以使用df.style代替IPython.display.HTML。这也允许您添加其他格式,例如突出显示悬停时的行:

from IPython.display import HTML
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df['image'] = 'so-logo.png'
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '')


def hover(hover_color="#ffff99"):
    return dict(selector="tr:hover",
                props=[("background-color", "%s" % hover_color)])

styles = [
    hover(),
    dict(selector="th", props=[("font-size", "150%"),
                               ("text-align", "center")]),
    dict(selector="caption", props=[("caption-side", "bottom")])
]
html = (df.style.set_table_styles(styles)
          .set_caption("Hover to highlight."))

html

我把光标放在第二行:

With hover