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

使用pd.concat合并多个小DataFrame为大表时最终为空的求助

问题解决方法

问题根因

  • 你没有将每次清洗完成的子DataFrame更新到总表变量中,每次concat都使用初始的空all_data和当前子表拼接,循环结束后初始的all_data始终为空。
  • 合并逻辑和单表清洗逻辑顺序错误,应该先完成单个子表的全部清洗操作,再合并到总表,避免重复执行重命名、索引调整等操作。

修正后代码

import camelot
import pandas as pd

# 读取PDF得到表格 
pdf_data = camelot.read_pdf('GMCC services 8517404.pdf', flavor='lattice', pages='1', encoding='utf-8' )
# 先建列表存储所有清洗好的子表,最后一次性合并性能更高
df_list = []

for info  in pdf_data:
    # 读取当前子表
    df = info.df
    # 重命名业务字段
    df = df.rename({0:'product_no',1:'description', 2:'quantity', 3:'net_price', 4:'total'}, axis='columns')
    # 提取当前表格的站点编码
    site = df.iloc[-1, 0]
    # 删除当前表格首行
    df = df.drop(index=df.index[0]).reset_index(drop=True)
    # 新增站点列
    df['site'] = site
    # 删除当前表格末行
    df = df.drop(index=df.index[-1]).reset_index(drop=True)
    # 清洗完成的子表加入列表
    df_list.append(df)

# 所有子表处理完毕后一次性合并为总表,ignore_index自动重置行索引
all_data = pd.concat(df_list, ignore_index=True)
# 打印合并后的完整大表
print(all_data)

补充说明

用列表先存储所有子表最后一次性concat的方式,比循环中每次拼接总表的性能高很多,在你有73个表格的场景下优化效果更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:06