如何提取PDF多页表格并合并为单个DataFrame?
合并PDF多页表格为单个DataFrame
你的代码已经完成了最核心的表格提取工作,只差最后一步把分散的DataFrame合并起来!我来帮你调整代码:
基础合并方法(假设每页表格结构完全一致)
你已经初始化了tables列表,但没有把每页生成的DataFrame添加进去。只需要在循环里把每个df追加到列表,最后用pd.concat()合并即可:
import pdfplumber import pandas as pd pdf_file = "df.pdf" tables = [] with pdfplumber.open(pdf_file) as pdf: for pg in pdf.pages: # 简化写法,直接遍历所有页面 tbl = pg.extract_table() if tbl: # 先判断当前页是否有表格,避免空值报错 df = pd.DataFrame(tbl) tables.append(df) # print(f'已提取当前页表格:\n{df}') # 合并所有DataFrame,ignore_index=True重置行索引避免重复 combined_df = pd.concat(tables, ignore_index=True) print("合并后的完整表格:") print(combined_df)
进阶处理:每页都有重复表头的情况
如果你的PDF每一页都带相同的表头,直接合并会导致表头重复出现在数据里。这时候可以区分第一页和后续页面,只保留第一页的表头:
import pdfplumber import pandas as pd pdf_file = "df.pdf" tables = [] with pdfplumber.open(pdf_file) as pdf: for idx, pg in enumerate(pdf.pages): tbl = pg.extract_table() if not tbl: continue if idx == 0: # 第一页:用第一行作为列名,数据从第二行开始 df = pd.DataFrame(tbl[1:], columns=tbl[0]) else: # 后续页:跳过第一行表头,复用第一页的列名 df = pd.DataFrame(tbl[1:], columns=tables[0].columns) tables.append(df) combined_df = pd.concat(tables, ignore_index=True) print(combined_df)
这样处理后,合并后的DataFrame就会有正确的表头,且没有重复的表头行。
内容的提问来源于stack exchange,提问作者Colin Sorensen
相关产品推荐
相关产品推荐

