【问题标题】:Problem when importing table from pdf to python using tabula使用tabula将表格从pdf导入python时出现问题
【发布时间】:2019-04-25 03:02:20
【问题描述】:

在 Python 中使用 tabula 从 pdf 导入数据时,在某些情况下,我会获得合并为一列的两列或多列。从同一个 pdf 获得的所有文件都不会发生这种情况。

在这种情况下,这是用于读取 pdf 的代码:

from tabula import wrapper

tables = wrapper.read_pdf("933884 cco Saupa 1.pdf",multiple_tables=True,pages='all')

i=1

for table in tables:

    table.to_excel('output'+str(i)+'.xlsx',index=False)

    i=i+1

例如,当我打印从其中一个名为“output_pd”的 Excel 文件中获取的数据框的第一项时:

print (output_pd[0][1])

我得到:

76) 858000015903708 77) 858000013641969 78)

这五个数字在一个列中,所以我不能单独对待它们。 在这些情况下是否可以改进数据处理?

【问题讨论】:

    标签: python-3.x tabula


    【解决方案1】:

    您可以尝试在 Excel 中手动编辑数据。如果您在 excel 中的数据选项卡下使用文本到列,它允许您将一列拆分为多列而无需太多工作,但您需要为每个 excel 文件都这样做,这可能会很痛苦。

    【讨论】:

    • 我还尝试将 pdf 转换为 excel,然后再将其与 Python 一起使用。但它也有一些手动编辑,我试图避免。
    • 你尝试过tabula中的其他提取方法吗?它可能会带来更好的结果。除此之外,我真的没有什么可以给你。一年前我不得不使用 tabula 来处理 35 个巨大的 excel 文件,并且不得不在 excel 中进行大量的手动编辑,这并不好玩
    【解决方案2】:

    在使用tabula获得的列表中每个数据框的每一列的每个项目中进行迭代

    wrapper.read_pdf(file)
    

    在这种情况下

    tables
    

    可以获得干净的数据。 在这种情况下:

    prueba =[]
    i = 0
    for table in tables:    
        for columna in table.columns:        
            for item in (str(table[columna]).split(" ")):            
                if "858" in str(item):
                    prueba.append(item[0:15]) 
    print (prueba[0:5])
    

    结果:

    ['858000019596025', '858000015903707', '858000013641975', '858000000610864', '858000013428853']
    

    但是

    tabula.wrapper.read_pdf
    

    不阅读整个初始 pdf。 2 个值留在最后一页。所以,还是需要手动修改一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2011-09-28
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多