如何使用PyPDF将PDF单页转换为DataFrame?WIPO特定PDF第24页转换问题求解
搞定PDF第24页转DataFrame的问题
嘿,我来帮你解决这个麻烦!你用pypdf提取的是无结构的纯文本,想把它转成规整的DataFrame确实费劲——毕竟表格的行列结构在纯文本里完全乱掉了。而tabula就是专门用来提取PDF中表格数据的工具,咱们直接用它来处理,效率高多了。
下面是具体的实现步骤和代码:
1. 先搞定依赖(如果还没弄的话)
tabula依赖Java环境,所以先确保你已经装了Java(OpenJDK或者Oracle的JDK都行,记得配置好环境变量),然后安装tabula-py:
pip install tabula-py
2. 直接用tabula提取第24页的表格
注意哦:tabula的页面编号是从1开始计数的,你要的第24页直接传pages='24'就可以,不用像pypdf那样减1。
基础提取代码
import tabula import pandas as pd # 自动识别第24页的所有表格,返回DataFrame列表 dfs = tabula.read_pdf(r"C:\Users\smx\python\wipo_pub_gii_2021.pdf", pages='24', multiple_tables=True) # 如果页面只有一个表格,直接取第一个元素就行 df = dfs[0] # 看看提取的结果 print(df.head())
3. 处理可能的格式混乱问题
如果提取后的表格有合并单元格、表头拆分在多行的情况,咱们可以做一些简单的清洗:
比如表头占了两行,合并成一行:
# 把前两行表头合并成一行 df.columns = [' '.join(str(col) for col in col_group).strip() for col_group in df.iloc[:2].values.T] # 跳过原来的表头行,重置索引 df = df.iloc[2:].reset_index(drop=True) # 处理空值,把NaN换成空字符串或者你需要的占位符 df = df.fillna('')
4. 保存结果(可选)
要是需要把处理好的DataFrame存成文件:
# 存成CSV df.to_csv('gii_2021_page24.csv', index=False) # 存成Excel df.to_excel('gii_2021_page24.xlsx', index=False)
小技巧
如果tabula识别表格的位置不准,你可以用PDF阅读器的测量工具(比如Adobe Acrobat的测量功能)获取表格的左上角和右下角坐标,然后用area参数指定范围:
# area格式是[顶部坐标, 左侧坐标, 底部坐标, 右侧坐标] dfs = tabula.read_pdf(r"C:\Users\smx\python\wipo_pub_gii_2021.pdf", pages='24', area=[100, 50, 600, 800], multiple_tables=True)
内容的提问来源于stack exchange,提问作者user032020
相关产品推荐
相关产品推荐

