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
相关产品推荐
相关产品推荐

