Pandas HTML 输出条件格式 - 如果值在范围内,则突出显示单元格

Posted

技术标签:

【中文标题】Pandas HTML 输出条件格式 - 如果值在范围内,则突出显示单元格【英文标题】:Pandas HTML Output Conditional Formatting - Highlight cell if value in range 【发布时间】:2016-10-04 22:30:58 【问题描述】:

我正在使用 pd.to_html() 方法构建 HTML 格式的报告。谁能澄清我如何为数据框的特定列格式化值在 ​​-0.5 和 0.5 之间且带有绿色背景的单元格?

【问题讨论】:

到目前为止您尝试了什么,您是否有任何代码示例无法正常工作,我们可以帮助您解决? 不幸的是甚至找不到任何例子来尝试 你看过this question吗?这可能会有所帮助。 【参考方案1】:

您可以使用 style 属性(从 pandas v0.17.1 开始引入)对 DataFrame 进行自定义格式化。 一个做你想做的事的例子:

df = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'))

def highlight_vals(val, min=-0.5, max=0.5, color='green'):
    if min < val < max:
        return 'background-color: %s' % color
    else:
        return ''

df.style.applymap(highlight_vals, subset=['B', 'C', 'D'])

给你

完整示例请参见此笔记本:http://nbviewer.jupyter.org/gist/jorisvandenbossche/8b74f71734cd6d75a58c5a048261a7a7

有关如何格式化数据框的更多示例,请参阅文档:http://pandas.pydata.org/pandas-docs/stable/style.html

要将输出写入文件,您可以:

with open('filename.html', 'w') as f:
    f.write(df.style.applymap(highlight_vals, subset=['B', 'C', 'D'])
                    .set_table_attributes("border=1").render())

【讨论】:

谢谢,这正是我看到的。会尝试 如何添加 HTML 输出的路径?想要在特定位置打印文件。没有一个例子没有表明这一点。谢谢 @Felix 您必须自己编写 render 返回到文件的字符串。我添加了一个示例如何执行此操作。 谢谢你,@joris。出于某种原因,保存的 html 页面着色工作正常,但表格的边框消失了。对此有什么想法吗? 你是对的。出于某种原因,样式模板在 table 标记中不包含 border=1。您可以使用.set_table_attributes("border=1") 添加它。我更新了答案。

以上是关于Pandas HTML 输出条件格式 - 如果值在范围内,则突出显示单元格的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:仅当某个列值在过去 N 个月内出现 N 次时才保留行

如果列值在一定范围内彼此接近,则删除 pandas 行

Python Pandas 数据以日期格式输出到 excel 的问题 [重复]

如果值在列表中,则 Pandas 数据框中的重复行

5种常用格式的数据输出,手把手教你用Pandas实现

如何输出满足特殊条件的 Pandas DataFrame?