You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:03