如何使用Pandas将PDF提取后的文本还原为表格列?
解决PDF提取后Pandas拆分列的问题
问题背景
我是Pandas新手,使用pdfplumber读取PDF中的数据表格并转换为Excel文件。转换后的Excel内容完整,但所有列的内容被合并成带单引号的字符串——每个单词对应原PDF的一列,逗号对应原PDF的空列。需要将这些内容重新拆分回独立列,还原原PDF的表格结构。
当前代码
import pdfplumber import pandas as pd from pandas import ExcelWriter with pdfplumber.open('Sistema BanPara.pdf') as pdf: df = pd.DataFrame(page.extract_table() for page in pdf.pages).astype(str) with pd.ExcelWriter('table.xlsx') as writer: df.to_excel(writer)
解决方案
方法1:处理已生成的中间Excel
- 读取中间Excel文件
df = pd.read_excel('table.xlsx')
- 拆分字符串为多列
按逗号拆分合并的字符串,expand=True会自动将拆分结果转为多列:
split_df = df['0'].str.split(',', expand=True) # 替换'0'为实际列名
- 清理单引号和空格
去除每个单元格首尾的单引号和多余空格:
split_df = split_df.apply(lambda col: col.str.strip("' "))
- 保存最终结果
split_df.to_excel('final_table.xlsx', index=False)
方法2:直接从PDF生成最终Excel(跳过中间文件)
整合流程,无需先保存中间Excel,直接处理后输出:
import pdfplumber import pandas as pd # 读取PDF所有页面的表格 with pdfplumber.open('Sistema BanPara.pdf') as pdf: all_rows = [] for page in pdf.pages: table = page.extract_table() if table: # 跳过无表格的页面 all_rows.extend(table) # 转换为DataFrame df = pd.DataFrame(all_rows) # 拆分并清理列 if not df.empty: # 拆分合并的字符串列 split_df = df[0].str.split(',', expand=True) # 去除单引号和空格 split_df = split_df.apply(lambda col: col.str.strip("' ")) # 保存最终表格 split_df.to_excel('final_table.xlsx', index=False)
内容的提问来源于stack exchange,提问作者Ana Fortes
相关产品推荐
相关产品推荐

