提问人:khankhattak 提问时间:10/2/2023 最后编辑:khankhattak 更新时间:10/6/2023 访问量:84
修复使用 Tabula 读取 PDF 文件中的表格时缺少的标题
Fix missing header while reading table in PDF file using Tabula
问:
我想从PDF文件中1992年至1993年的统计进出口数据下面的PDF文件图像中提取表格数据
我想要的数据是创建数据集的数值数据。我尝试使用 tabula.py 库,但我获得的数据不可用或不可纠正:Tabula 库提取的表格数据。
代码片段:
# Modules Imported
import tabula
from tabula import read_pdf
from tabulate import tabulate
import pandas as pd
# PDF file is being read and tables are being stored in a dataframe
df = read_pdf(PDF_FILE_PATH, stream=True, pages = "all")
此外,即使使用 area 和 columns 参数,另一个代码片段也会产生相同的结果
pdf_reader = pypdf.PdfReader(PDF_FILE_PATH)
num_pages = len(pdf_reader.pages)
num_pages
table_pdf = read_pdf(
PDF_FILE_PATH,
guess = False,
pages = 1,
stream = True,
encoding = 'utf-8',
area = (0, 0, 200, 250),
columns = None,
)
任何建议将不胜感激。
原始文件在这里: PBS 政府统计表格数据
答:
当您有固定间距的文本(例如来自 LinePrinter)时,您可以使用一个世纪很久以前的旧方法。所以自从我记得 Excel 4 以来?导入了 MSDos 文本,所以我通常使用 Office 97 进行此类输出,无论如何,这里使用 2013 年,因为它只有十年的历史,我们可以按顺序查看输入。
因此,从程序上讲,它是非常手动的,一行代码和人眼。
上面的数据帧是由
poppler\22.02>pdftotext -nopgbrk -fixed 6 imports.pdf
需要真正的 MacroCoding 以人性化的逻辑方式整理第三列,以处理转换时剥离的任何缺失的包装。
但是,要删除这些不需要的页面标题,最好使用相当于DOS Findstr的现代标题,因此要排除页码和----我们需要运行第二行代码。
让我们先检查一下它是否反向工作,我们要确保它们将被排除在外,在这里我们注意到,在 1005 页之后,还有一个次要的 12 页需要考虑。
这已经足够好了,所以预处理数据。
findstr /v /l "IMPORTS Value \| ity ------" imports.txt > cleaner.txt
因此,文本现在适合在列中导入到 Excel,但请注意第三列,确保它是向右的。NO
回到那个排除所有标题(包括第 1 页的 2 个 ! 我们只需要先导出第一个集合,所以现在我们想要:
所以整个命令集是
pdftotext -nopgbrk -fixed 6 -f 1 -l 1 -H 140 -W 900 imports.pdf DataFrame.txt
pdftotext -nopgbrk -fixed 6 imports.pdf -| findstr /v /l "IMPORTS Value \| ity ------" imports.txt >> DataFrame.txt
运行 2 行程序不到 10 秒
然后 Python 或 Excel /e 或 /m(使用合适的导入宏)加载 DataFrame:.txt
评论
上一个:运行 tabula 时内核死亡
评论