如何使用pandas.styler格式化索引文本数据生成自定义表格
问题说明
需要在Jupyter Notebook中基于pandas DataFrame生成符合排版要求的表格,替代原有的Excel/Word表格制作环节,核心诉求包括调整索引文本样式、自定义列宽、控制文本对齐规则、长文本自动换行,原尝试的样式配置代码未生效。
修正后可直接运行的代码
import pandas as pd import numpy as np from faker import Faker # 测试数据生成 faker = Faker() Faker.seed(4321) dat = pd.DataFrame( {'WorkFlow':[ 'Macro Economic Changes' ,'Industry Changes' ,'Federal Legislative Changes' ,'Model Development' ,'Model Validation' ,'Model Production Testing' ,'Market Research' ,'Marketing Plan' ,'Marketing Material' ,'Client Solicitation']}) choices = ['Marketing','Management','Research'] conditions = [dat['WorkFlow'].str.find('Market')>-1 ,dat['WorkFlow'].str.find('Change')>-1 ,dat['WorkFlow'].str.find('Model' )>-1] dat['Dept']= np.select(conditions,choices,'BusinessDev') dat['AssignedAssociate'] =dat['WorkFlow'].apply(lambda x: faker.name()) dat['StatusReport']=np.array(['Green']*5+['Yellow']+['Green']*3+['Red']) dat['StatusReport']= dat['StatusReport']+": Due to ...sdf asdfasf asdfasdfas asdgfasdfasdfsadfsadf. asdfsafsaf asdfsafsadf" dat.set_index(['Dept','WorkFlow'],inplace=True) # 样式配置 dat.style.set_table_styles([ # 全局表格布局配置,开启固定布局后自定义列宽才会生效 {'selector': 'table', 'props': [('table-layout', 'fixed'), ('width', '100%')]}, # 索引表头样式 {'selector': 'th.index_name', 'props': [ ('text-align', 'center'), ('font-weight', 'bold'), ('font-style', 'italic') ]}, # 行索引单元格通用样式 {'selector': 'th.row_heading', 'props': [ ('text-align', 'left'), ('vertical-align', 'top'), ('overflow-wrap', 'break-word'), ('padding', '4px 8px') ]}, # 第一级行索引列宽 {'selector': 'th.row_heading.level0', 'props': [('width', '15%')]}, # 第二级行索引列宽 {'selector': 'th.row_heading.level1', 'props': [('width', '25%')]}, # 列标题样式 {'selector': 'th.col_heading', 'props': [ ('text-align', 'center'), ('font-weight', 'bold'), ('background-color', '#f0f0f0') ]}, # 普通数据单元格通用样式 {'selector': 'td', 'props': [ ('text-align', 'left'), ('vertical-align', 'top'), ('overflow-wrap', 'break-word'), ('padding', '4px 8px') ]}, # 自定义AssignedAssociate列宽 {'selector': 'td.col0', 'props': [('width', '20%')]}, # 自定义StatusReport列宽 {'selector': 'td.col1', 'props': [('width', '40%')]} ])
样式调整说明
- 各列的宽度百分比可根据实际需求修改,总占比不超过100%即可
- 可自行补充其他CSS属性实现更多排版效果,比如边框、背景色、字体大小等,符合标准CSS语法即可生效
- 若需要合并第一级索引的相同内容单元格,可在样式配置末尾追加
.set_sticky(axis="index")实现多级索引的分层展示效果
内容的提问来源于stack exchange,提问作者Jaime
相关产品推荐
相关产品推荐

