这里是a link to a PDF file。
在第13页到第15页,有一系列的名字,我想组织在一个 Dataframe 。PDF中的名称在第13页和第14页的3列列表和第15页的2列列表中组织。为了将此列表存储为df,我想添加列名。
下面是第13页第一列的第一个元素的普通复制/粘贴:
AUVERGNE-RHÔNE-ALPES
24
01. AIN | 1 | Malafretaz Plage principale
03. ALLIER | 1 | Vieure Plage du plan d’eau
de Vieure
07. ARDÈCHE| 1 |Saint-Martin-d’Ardèche
Plage du Grain de sel
15. CANTAL | 1 | Trémouille Lastioulles
如果它是一个CSV,我会理想地重新组织它:
region,region_code,dpt_code,departement,flag,commune,plage
AUVERGNE-RHÔNE-ALPES,24,01.,AIN,| 1 |,Malafretaz,Plage principale
, ,03.,ALLIER,| 1 |,Vieure,Plage du plan d’eau de Vieure
, ,07.,ARDÈCHE,| 1 |,Saint-Martin-d’Ardèche,Plage du Grain de sel
, ,15.,CANTAL,| 1 |,Trémouille,Lastioulles
下面是一段Python代码片段,我试图这样做,但当我组织列时,我遇到了一个错误:
import tabula
import pandas as pd
# Link to PDF
pdf_url = "https://www.teragir.org/wp-content/uploads/2023/05/DP-PAVBLEU-2023-WEB.pdf"
# Use Tabula to extrat the data on page 13 (I start with one single page)
df = tabula.read_pdf(pdf_url, pages=13)[0]
# Delete empty lines
df.dropna(inplace=True)
# Organize the columns
df.columns = ["Region", "Region_N", "Dpt_N", "Departement", "Flag", "Commune", "Plage"]
# Fill the missing values in the columns "Region" et "Region_N"
df["Region"].fillna(method="ffill", inplace=True)
df["Region_N"].fillna(method="ffill", inplace=True)
# Save the table in a CSV
df.to_csv("liste_plages.csv", index=False)
2条答案
按热度按时间cbwuti441#
如果使用边界框,则可以提取所需的文本并解析数据:
输出:
现在您可以解析数据。
rjee0c152#
pdfplumber
允许您完全自定义其表提取过程。https://github.com/jsvine/pdfplumber#extracting-tables
以下是一个有用的例子:
在这里,我们使用以下标准隔离
01.
标题:.
结尾有了所有的标题,我们就可以检测到列的边缘。
然后我们裁剪出该列,并提取每个标题上方的水平线,实际上是在每个条目周围创建一个“框”,以将文本捕获为一个表格单元格。
这仅提取第一列,即以
edges[0], edges[1]
为例:第2列和第3列以拆分单元格的内容开始,因此您需要添加逻辑来检查和合并,但这可能比直接解析文本更简单。