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

Python DataFrame循环外运行正常 循环内遍历文件追加后final_df始终为空排查

循环内DataFrame始终为空的问题排查与修复

异常原因定位

  • 缩进逻辑错位:原循环代码的核心表格解析逻辑全部落在except异常分支内部。正常打开文档、成功定位表格的执行流程会直接跳过逐行解析、生成临时DataFrame的步骤,只有打开文档触发异常、进入错误捕获分支时才会执行相关代码,此时甚至没有合法的表格对象,自然无法产出有效数据。
  • Pandas追加逻辑错误:DataFrame.append()方法为非原地修改方法,仅会返回包含追加内容的新DataFrame,不对原对象做更新。原代码中直接调用final_df.append(df)却不接收返回值、重新赋值,会导致final_df始终保持最初的空表状态。

修复后完整代码

# 初始化汇总表、处理记录列表
empty = []
final_df = pd.DataFrame(empty, columns=['column_1', 'column_2', 'column_3', 'column_4', 'report'])
processed_files = []
error_log = []

for idx, c in enumerate(targets_in_dir):
    try:
        document = Document(c)
        table = document.tables[2]
        processed_files.append(c)
    except:
        # 仅记录打开失败的文件路径,直接跳过当前文件的后续处理
        error_log.append(c)
        continue

    # 表格解析逻辑与try/except块同级,保证正常打开文件后会执行解析
    data = []
    keys = None
    for i, row in enumerate(table.rows):
        text = (cell.text for cell in row.cells)
        if i == 0:
            keys = tuple(text)
            continue
        row_data = dict(zip(keys, text))
        data.append(row_data)

    df = pd.DataFrame(data)
    df['report'] = str(c)
    # 接收append返回的新表,完成累计追加
    final_df = final_df.append(df)

兼容性优化提示

Pandas 2.0+版本已将DataFrame.append()标记为弃用,更推荐使用pd.concat()实现多表拼接,性能表现也更优,对应追加环节的写法可以替换为:

final_df = pd.concat([final_df, df], ignore_index=True)

内容的提问来源于stack exchange,提问作者Nimrod Ets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 06:06:05