如何将Pandas透视表导出至Word文档并保留格式(附示例)
如何将Pandas透视表导出到Word并保留格式
没问题,我来一步步教你怎么把Pandas生成的透视表导出到Word文档,还能完整保留原有的格式。咱们从准备工作到完整示例一步步来,确保你能直接复用代码。
准备工作:安装必要的库
你需要用到两个核心库:
pandas:用来生成透视表和处理数据格式python-docx:用来创建、编辑Word文档
打开终端执行以下命令安装:
pip install pandas python-docx
完整实现步骤与示例
下面我用一个销售数据的例子,演示从生成透视表到导出带格式Word文档的全流程。
步骤1:生成透视表
首先创建示例数据,并用pd.pivot_table生成带总计的透视表:
import pandas as pd from docx import Document from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT import html # 构造示例销售数据 data = { '地区': ['华东', '华东', '华南', '华南', '华北', '华北'], '产品': ['A', 'B', 'A', 'B', 'A', 'B'], '季度': ['Q1', 'Q2', 'Q1', 'Q2', 'Q1', 'Q2'], '销售额': [12000, 8000, 15000, 9000, 10000, 7000] } df = pd.DataFrame(data) # 创建带总计的透视表 pivot_table = pd.pivot_table( df, values='销售额', index=['地区', '产品'], columns=['季度'], aggfunc='sum', margins=True, margins_name='总计' )
步骤2:自定义透视表格式(保留原有样式)
用Pandas的Styler对象设置透视表的样式,比如表头加粗、居中、背景色,总计行高亮,数值千分位格式化等,这些设置会在导出时完整保留:
def style_pivot_table(styler): # 设置表头样式:加粗、居中、浅灰背景 styler.set_table_styles([ {'selector': 'th', 'props': [('font-weight', 'bold'), ('text-align', 'center'), ('background-color', '#f0f0f0')]}, # 所有单元格居中对齐 {'selector': 'td', 'props': [('text-align', 'center')]}, # 总计行样式:加粗、浅蓝色背景 {'selector': 'tr:last-child', 'props': [('font-weight', 'bold'), ('background-color', '#cce5ff')]} ]) # 格式化销售额为千分位格式 styler.format('{:,.0f}', subset=pivot_table.columns[:-1]) styler.format('{:,.0f}', subset=['总计']) return styler # 应用样式到透视表 styled_pivot = style_pivot_table(pivot_table.style)
步骤3:将带格式透视表转为HTML
Styler对象可以直接导出为HTML,这是保留格式的关键——HTML会完整记录所有样式信息,方便后续导入Word:
html_table = styled_pivot.to_html()
步骤4:将HTML表格插入到Word文档
用python-docx创建Word文档,然后将HTML表格插入进去,同时可以设置文档的字体、标题等:
# 创建新的Word文档 doc = Document() # 添加居中的标题 title = doc.add_heading('销售数据透视表', level=1) title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 添加说明段落 doc.add_paragraph('以下是各地区各产品的季度销售额汇总(含总计):') # 解析HTML表格并插入到Word中 from docx.oxml import parse_xml from docx.oxml.ns import qn # 临时创建一个段落用于插入HTML(后续会删除) temp_paragraph = doc.add_paragraph() run = temp_paragraph.add_run() # 将HTML转换为docx可识别的XML元素 table_xml = parse_xml(html_table.encode('utf-8')) # 将表格插入到文档中(放在临时段落之后) doc._body._body.insert_element_after(table_xml, temp_paragraph._element) # 删除临时段落 doc._body._body.remove(temp_paragraph._element) # 统一设置文档字体(可选,让显示更美观) for paragraph in doc.paragraphs: for run in paragraph.runs: run.font.name = '微软雅黑' run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') run.font.size = Pt(10) # 保存Word文档 doc.save('销售透视表.docx') print("透视表已成功导出到Word文档,格式完整保留!")
关键说明
- 如果你需要更复杂的格式(比如合并单元格、自定义边框),可以在
style_pivot_table函数中扩展Styler的样式设置,或者在插入Word后用python-docx的表格API进一步调整。 - 这种方法不依赖Office环境,跨平台可用(Windows、Mac、Linux都能运行)。
内容的提问来源于stack exchange,提问作者Swathi
相关产品推荐
相关产品推荐

