改变使用样式和css的pandas数据框html表python中的文本的颜色

我有一个pandas数据框:

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的表看起来像这样: 在这里输入图像描述

我想为“MOS”行中的所有值着色一定的颜色,并为左侧的两个索引/标题列以及顶部标题行着色,而不是其余的具有值的单元格。 任何想法,我可以做到这一点?

这需要几个步骤:

首先导入HTMLre

 from IPython.display import HTML import re 

你可以通过to_html方法得到这个htmlpandas。

 df_html = df.to_html() 

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

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

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

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

并创build一个样式标签。 这真的取决于你。 我只是添加了一些hover效果。

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

最后,显示它

 HTML(style + df_html) 

function齐全。

 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('\n'): 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, '\n'.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并坚果!

使用pandas新的造型function( 自0.17.1 ):

 import numpy as np import pandas as pd 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']) def highlight_MOS(s): is_mos = s.index.get_level_values(1) == 'MOS' return ['color: darkorange' if v else 'color: darkblue' for v in is_mos] s = df.style.apply(highlight_MOS) s 

在这里输入图像描述