使用样式和 css 更改 Pandas 数据框 html table python 中文本的颜色 [英] Change the color of text within a pandas dataframe html table python using styles and css

查看:13
本文介绍了使用样式和 css 更改 Pandas 数据框 html table python 中文本的颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个熊猫数据框:

arrays = [['Midland', 'Midland', 'Hereford', 'Hereford', 'Hobbs','Hobbs', 'Childress',
           'Childress', 'Reese', 'Reese', 'San Angelo', 'San Angelo'],
          ['WRF','MOS','WRF','MOS','WRF','MOS','WRF','MOS','WRF','MOS','WRF','MOS']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples)
df = pd.DataFrame(np.random.randn(12, 4), index=arrays,
                  columns=['00 UTC', '06 UTC', '12 UTC', '18 UTC'])

打印 df 的表格如下所示:

The table that prints df from this looks like this:

我想将MOS"行中的所有值着色为某种颜色,并为左侧的两个索引/标题列以及顶部标题行着色与具有值的其余单元格不同的背景颜色他们.任何想法我怎么能做到这一点?

I would like to color all of the values in the 'MOS' rows a certain color and color the left two index/header columns as well as the top header row a different background color than the rest of the cells with values in them. Any ideas how I can do this?

推荐答案

这需要几个步骤:

首先导入HTMLre

from IPython.display import HTML
import re

您可以通过 to_html 方法获取 Pandas 发布的 html.

You can get at the html pandas puts out via the to_html method.

df_html = df.to_html()

接下来,我们将为我们要创建的 html 表格和样式生成一个随机标识符.

Next we are going to generate a random identifier for the html table and style we are going to create.

random_id = 'id%d' % np.random.choice(np.arange(1000000))

因为我们要插入一些样式,所以我们需要小心地指定这种样式将只用于我们的表格.现在让我们将其插入 df_html

Because we are going to insert some style, we need to be careful to specify that this style will only be for our table. Now let's insert this into the df_html

df_html = re.sub(r'<table', r'<table id=%s ' % random_id, df_html)

并创建一个样式标签.这真的取决于你.我只是添加了一些悬停效果.

And create a style tag. This is really up to you. I just added some hover effect.

style = """
<style>
    table#{random_id} tr:hover {{background-color: #f5f5f5}}
</style>
""".format(random_id=random_id)

最后展示一下

HTML(style + df_html)

功能一应俱全.

def HTML_with_style(df, style=None, random_id=None):
    from IPython.display import HTML
    import numpy as np
    import re

    df_html = df.to_html()

    if random_id is None:
        random_id = 'id%d' % np.random.choice(np.arange(1000000))

    if style is None:
        style = """
        <style>
            table#{random_id} {{color: blue}}
        </style>
        """.format(random_id=random_id)
    else:
        new_style = []
        s = re.sub(r'</?style>', '', style).strip()
        for line in s.split('
'):
                line = line.strip()
                if not re.match(r'^table', line):
                    line = re.sub(r'^', 'table ', line)
                new_style.append(line)
        new_style = ['<style>'] + new_style + ['</style>']

        style = re.sub(r'table(#S+)?', 'table#%s' % random_id, '
'.join(new_style))

    df_html = re.sub(r'<table', r'<table id=%s ' % random_id, df_html)

    return HTML(style + df_html)

像这样使用它:

HTML_with_style(df.head())

HTML_with_style(df.head(), '<style>table {color: red}</style>')

style = """
<style>
    tr:nth-child(even) {color: green;}
    tr:nth-child(odd)  {color: aqua;}
</style>
"""
HTML_with_style(df.head(), style)

学习 CSS 并发疯!

Learn CSS and go nuts!

这篇关于使用样式和 css 更改 Pandas 数据框 html table python 中文本的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆