Jupyter Lab中添加单元格高亮后如何维持表格原有HTML样式?
解决方法
原因分析
Pandas的Styler组件生成的表格会自带一套默认样式,且DOM结构和普通直接输出的DataFrame表格存在差异,导致你之前定义的全局CSS样式无法作用到Styler生成的表格上,因此出现样式丢失的情况。
方案一:将基础样式整合进Styler(推荐)
直接通过Styler.set_table_styles()方法把基础表格样式和高亮样式结合,两者会同时作用于目标表格:
import pandas as pd import numpy as np # 初始化数据 df = pd.DataFrame({"A": [*"123123123"], "B": [*"abcdefghi"]}) # 定义基础表格样式 base_table_styles = [ { 'selector': 'td, th', 'props': [ ('border', '1px solid lightgray'), ('font-size', '12px'), ('font-family', 'Verdana') ] } ] # 高亮函数保持不变 def style_specific_cell(x): c1 = 'background-color: red' c2 = '' df1 = pd.DataFrame('', index=x.index, columns=x.columns) m = x['B'] == 'h' df1['B'] = np.where(m, c1, c2) return df1 # 先设置基础样式,再应用高亮规则 df.style.set_table_styles(base_table_styles).apply(style_specific_cell, axis=None)
方案二:修改全局CSS选择器
如果想继续使用全局HTML样式的方式,只需调整CSS选择器,让它覆盖Styler生成的表格(Styler表格默认带有styler类):
%%HTML <style type="text/css"> /* 同时匹配普通DataFrame表格和Styler生成的表格 */ table.dataframe td, table.dataframe th, table.styler td, table.styler th { border: 1px solid lightgray; font-size: 12px; font-family: Verdana; } </style>
之后再运行高亮代码df.style.apply(style_specific_cell, axis=None),即可同时保留基础样式和高亮效果。
内容的提问来源于stack exchange,提问作者ProcolHarum
相关产品推荐
相关产品推荐

