如何使用.style为pandas DataFrame的列标题和表格标题添加边框
问题原因
你遇到的样式覆盖问题,本质是pandas.io.formats.style.Styler.set_table_styles方法默认参数overwrite=True,每次调用都会清空之前配置的所有表格样式,所以后面追加列标题样式时会把之前配置好的表格标题边框、格式全部清除。
解决方法
推荐直接将所有表格样式规则合并到同一次set_table_styles调用中,从根源避免多次调用的冲突问题,示例代码如下:
import seaborn as sns # 基础样式配置保持不变 final = unique_shows_imdb_final.style.bar(subset=["Netflix IMDb Score"], color='')\ .bar(subset=["Hulu IMDb Score"], color='')\ .bar(subset=["Prime IMDb Score"], color='')\ .bar(subset=["Disney+ IMDb Score"],color='')\ .background_gradient(cmap=sns.cm.rocket_r,axis=None)\ .hide_index()\ .format(precision=1) # 单元格属性配置 final.set_properties(subset=['Rank'], **{'font-weight': 'bold'}) final.set_properties(**{'border': '1px black solid !important'}) # 一次性配置所有表格级样式,包含表格整体边框、标题、列标题 final.set_table_styles([ # 表格整体边框 { 'selector': '', 'props': [('border', '2px black solid !important')] }, # 表格标题样式 { 'selector': 'caption', 'props': [ ('color', 'black'), ('font-size', '25px'), ('text-align','center'), ('border', '3px black solid !important') ] }, # 列标题样式 { 'selector': 'th', 'props': [ ('font-size', '10pt'), ('border-style','solid'), ('border-width','1px') ] } ]).set_caption("Top 20 TV Shows per Streaming Platform")
如果你需要分多次调用set_table_styles,只需要在后续调用时增加overwrite=False参数,保留之前配置的样式即可,示例如下:
# 原有标题样式配置不变 final.set_properties( **{'border': '1px black solid !important'} ).set_table_styles([{ 'selector': '', 'props': [('border', '2px black solid !important')]}] ).set_caption("Top 20 TV Shows per Streaming Platform").set_table_styles([{ 'selector': 'caption', 'props': [ ('color', 'black'), ('font-size', '25px'), ('text-align','center'), ('border', '3px black solid !important') ] }]) # 追加列标题样式时增加overwrite=False参数,不覆盖原有样式 final.set_table_styles([{'selector': 'th', 'props': [('font-size', '10pt'),('border-style','solid'),('border-width','1px')]}], overwrite=False)
内容的提问来源于stack exchange,提问作者Blueboots
相关产品推荐
相关产品推荐

