【问题标题】:How to extract multiple pandas dataframes from tables in PDF file and store them as CSVs in Python?如何从 PDF 文件中的表中提取多个 pandas 数据帧并将它们存储为 Python 中的 CSV?
【发布时间】:2022-01-13 19:49:58
【问题描述】:

我有一个食谱 PDF 文件,其中包含各种表格,这些表格描述了我正在使用的一个数据集中使用的变量。由于实际数据包含我需要查找的值,因此我需要从本食谱中的所有表中创建多个 CSV 输出文件。

例如,在这个 PDF 文件的第 15 页,我们有一个如下表,我需要从中提取 pandas 数据框,以便我可以将其保存为 CSV 文件以供以后使用。我不关心这些表中的“总计”,因为我只需要 value 和 label 字段。

我尝试通过在 Python 中使用 camelot 库来解决这个问题 -

import camelot
# try extracting table from 1 of the pages
tables = camelot.read_pdf('/Users/Downloads/TEDS-A-2018-DS0001-info-codebook_v1.pdf', pages = '12')

# check data
>>> type(tables)
<class 'camelot.core.TableList'>
>>> len(tables)
0

我不确定为什么在输出中没有得到任何表格。非常感谢任何帮助。

更新 - 我也尝试了 tabula 库,但是我只得到奇数行而不是表中的偶数行。这是我的试用代码 -


pdf_loc = 'csvs/TEDS-A-2018-DS0001-info-codebook_v1.pdf'
list_of_dataframs = tb.read_pdf(input_path=pdf_loc, pages='all')

number_of_dfs = len(list_of_dataframs)

print('first df in list')
list_of_dataframs[0]

这是输出 -

可以在here找到PDF说明书

【问题讨论】:

  • 不是一个答案,但如果这个包没有按预期工作,另一个值得尝试的 PDF 提取包是tabula。将 PDF 表读入 DataFrame。 Linked here.
  • @S3DEV - 是否有可能有一个基于我的食谱的工作示例并解析出 1 页?
  • 谢谢,非常感谢。我还注意到tabula 库,但我无法解析整个表。我只从特定页面上的表中获取奇数行。
  • 使用制表符,在阅读pdf时尝试添加lattice=True。以前这对我有用。

标签: python pandas dataframe pdf


【解决方案1】:

可以通过尝试一些参数来使用 Tabula。

根据您的情况,我已经看到表格的结构在整个 PDF 中都是相似的,因此我们可以使用 Tabula 的列参数来定义我们自己的列结构。如果我们不描述这个参数,tabula 会尝试自己猜测列结构,是的,它有时无法识别正确的表结构。

tables = tabula.read_pdf(filename, area = (0,0,800,800), pages=15, columns = (95, 410, 490), pandas_options={'header': None})

使用该参数后,我得到以下 PDF 第 15 页的输出:

我们可以将它用于所有页面,当然我们也可以进行预处理以删除不必要的行,从而获得完美的表格数据。我很乐意帮助您进一步计算这对您有用。

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多