使用样式和 css 更改 Pandas 数据框 html table python 中文本的颜色 [英] Change the color of text within a pandas dataframe html table python using styles and css
问题描述
我有一个熊猫数据框:
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?
推荐答案
这需要几个步骤:
首先导入HTML
和re
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屋!