遍历DataFrame列表生成Word文档出现IndexError如何修正代码
问题原因分析
- 变量名冲突:外层循环用
i作为列表遍历的索引变量,内层遍历DataFrame行时又重复使用i作为行号变量,导致外层的索引i被内层变量覆盖,后续读取dflist[i]时取到了错误的DataFrame对象,当目标DataFrame为空时就触发索引越界报错。 - f-string语法错误:保存文件时写的
fr'./test1[i].docx'中i被识别为普通字符串,不会替换为循环索引值,所有生成的文件会重名覆盖。 - 无空DataFrame兼容逻辑:未判断列表中是否存在空的DataFrame,空df执行表格写入逻辑时会直接报错。
修正后的完整代码
import docx import pandas as pd # 你的DataFrame列表 dflist = [DP, SMP, SMD, MP, MD, MSM, SAP, SAD,SAMA, SAM, AP,AD, ASM, AM,ASA] for idx, df in enumerate(dflist): doc = docx.Document() # 先判断当前DataFrame是否为空 if df.empty: doc.add_paragraph("当前DataFrame无数据") doc.save(fr'./test1_{idx}.docx') continue # 表格行数为df行数+表头行,列数和df列数一致 t = doc.add_table(df.shape[0] + 1, df.shape[1]) # 写入表头 for j in range(df.shape[1]): t.cell(0, j).text = str(df.columns[j]) # 写入表格数据 for row_idx in range(df.shape[0]): for col_idx in range(df.shape[1]): t.cell(row_idx + 1, col_idx).text = str(df.values[row_idx, col_idx]) # 按索引命名保存文件 doc.save(fr'./test1_{idx}.docx')
修改点说明
- 外层循环索引变量改为
idx,内层行/列遍历变量改为row_idx、col_idx,彻底避免变量名冲突;遍历数据时直接使用当前迭代拿到的df对象,不需要再从dflist中按索引读取,降低索引错误概率。 - 增加空DataFrame判断逻辑,空df也会生成对应文件并标注无数据,避免程序中断。
- 修正文件保存的f-string语法,用
{idx}替换循环索引,每个文件生成唯一名称不会覆盖。
内容的提问来源于stack exchange,提问作者Rob de Leeuw
相关产品推荐
相关产品推荐

