使用Python将Pandas DataFrame插入Word表格时重复值问题排查
问题原因及解决办法
你写的add_table_to_word_doc和make_rows_bold这两个函数逻辑没问题,问题十有八九出在你没贴出来的循环代码上,常见的几种错误情况和修复方式如下:
常见错误场景
1. 循环里重复传同一个DataFrame
要是你的循环代码不小心每次都传最后那个DataFrame(比如data3_summary),那生成的文档里自然全是一模一样的表格。比如错误写法:
doc = Document() dfs = [data1_summary, data2_summary, data3_summary] for _ in dfs: # 踩坑:每次都传同一个data3_summary,循环白跑 doc = add_table_to_word_doc(data3_summary, doc) doc.save("output.docx")
2. 循环里反复新建Document对象
如果每次循环都重新创建Document(),之前加的表格会直接被覆盖,最后文档里只剩最后一个表格,看起来就像所有表格都变成同一个值了。错误写法:
dfs = [data1_summary, data2_summary, data3_summary] for df in dfs: # 踩坑:每次循环都建新文档,之前的表格全丢了 doc = Document() doc = add_table_to_word_doc(df, doc) doc.save("output.docx")
3. 创建DataFrame时不小心共享了数据
虽然你贴的三个DataFrame是独立的,但如果实际循环里创建df时复用了同一个字典(比如改同一个字典再生成df),会导致多个df指向同一份数据。比如错误写法:
doc = Document() base_data = {'Header': [], 'Val1': []} for i in range(3): # 踩坑:修改同一个base_data字典,所有df都会同步变化 base_data['Header'] = [f'L{i+1}'] base_data['Val1'] = [float(100*(i+1))] df = pd.DataFrame(base_data) doc = add_table_to_word_doc(df, doc) doc.save("output.docx")
正确的循环写法
用下面的代码就能把三个不同的DataFrame正确加到同一个文档里:
# 先建一个空文档 doc = Document() # 把三个DataFrame放到列表里遍历 dfs = [data1_summary, data2_summary, data3_summary] for df in dfs: # 每次传当前循环的df,更新文档 doc = add_table_to_word_doc(df, doc) # 可选:表格之间加个空段落,排版更舒服 doc.add_paragraph() # 最后保存文档 doc.save("result.docx")
额外验证小技巧
- 先单独测每个DataFrame:分别调用
add_table_to_word_doc加单个df,看生成的文档对不对,确认每个df的数据本身没问题 - 循环里打印每个df的
df.shape或者df.head(),确保循环确实在遍历三个不同的DataFrame
内容的提问来源于stack exchange,提问作者Add
相关产品推荐
相关产品推荐

