使用python将pdf表格合并成一个excel表格

使用python将pdf表格合并成一个excel表格,python,pandas,dataframe,pdf,tabula-py,Python,Pandas,Dataframe,Pdf,Tabula Py,我使用tabla来表示下面的所有表格 是excel格式的一个表 这是我的密码: from tabula import read_pdf import pandas as pd allin = [] for page in range(1, 115): table = read_pdf("goal.pdf", pages=page, pandas_options={'header': None})[0] allin.a

我使用tabla来表示下面的所有表格

是excel格式的一个表

这是我的密码:

from tabula import read_pdf
import pandas as pd

allin = []
for page in range(1, 115):
    table = read_pdf("goal.pdf", pages=page,
                     pandas_options={'header': None})[0]
    allin.append(table)


new = pd.concat(allin)

new.to_excel("out.xlsx", index=False)
我还尝试了以下方法:

from tabula import read_pdf
import pandas as pd

table = read_pdf("goal.pdf", pages='all', pandas_options={'header': None})

new = pd.concat(table, ignore_index=True)

new.to_excel("out.xlsx", index=False)
电流输出:

但是我所面临的问题是,从第91页开始,我发现excel文件中的数据格式不正确

我已经单独调试了这个页面,但我不明白为什么它的格式错误,尤其是它的格式是相同的

from tabula import read_pdf
import pandas as pd

table = read_pdf("goal.pdf", pages='91', pandas_options={'header': None})[0]


print(table)
例如:

在这里,我已经运行了两页90和91的代码

从第48行开始,您将看到差异


您将注意到将姓名和地址放在一个单元格中的问题。城市和州也放在一个调用中

我在源代码中挖掘,它有一个选项,您可以手动定义列边界。设置列时,必须使用guess=False

tabla-py使用这个程序,在它的文档中我发现它需要的是百分比或点而不是像素值。所以我用这个程序来测量点的边界

结果:

                                      0                         1       2   3               4
45                        JARRARD, GARY      930 FORT WORTH DRIVE  DENTON  TX  (940) 565-6548
46                        JARRARD, GARY        2219 COLORADO BLVD  DENTON  TX  (940) 380-1661
47  MASON HARRISON, RATLIFF ENTERPRISES  1815 W. UNIVERSITY DRIVE  DENTON  TX  (940) 387-5431
48  MASON HARRISON, RATLIFF ENTERPRISES          109 N. LOOP #288  DENTON  TX  (940) 484-2904
49  MASON HARRISON, RATLIFF ENTERPRISES      930 FORT WORTH DRIVE  DENTON  TX  (940) 565-6548
                              0                       1                 2         3                 4
1941  UMSTATTD RESTAURANTS, LLC  120 WEST US HIGHWAY 54  EL DORADO SPRING      MS O    (417) 876-5755
2079               SIMONS, GARY         1412 BURLINGTON  NORTH KANSAS CIT      MY O    (816) 421-5941
2763       GRISHAM, ROBERT (RB)   403 WEST COURT STREET    WASHINGTON COU  ORTH HOU  S(E740) 335-7830
2764            STAUFFER, JACOB   403 WEST COURT STREET    WASHINGTON COU  ORTH HOU  S(E740) 335-7830
编辑:

它可能还需要选项区域中的点来跳过标题。或者您必须删除第一页的第一行

我没有检查所有行,但可能需要更改列边界

编辑:

很少有行出现问题——可能是因为城市中的文本太长了

col3 = df.iloc[:,3]

print(df[ col3.str.contains(' ') ])
结果:

                                      0                         1       2   3               4
45                        JARRARD, GARY      930 FORT WORTH DRIVE  DENTON  TX  (940) 565-6548
46                        JARRARD, GARY        2219 COLORADO BLVD  DENTON  TX  (940) 380-1661
47  MASON HARRISON, RATLIFF ENTERPRISES  1815 W. UNIVERSITY DRIVE  DENTON  TX  (940) 387-5431
48  MASON HARRISON, RATLIFF ENTERPRISES          109 N. LOOP #288  DENTON  TX  (940) 484-2904
49  MASON HARRISON, RATLIFF ENTERPRISES      930 FORT WORTH DRIVE  DENTON  TX  (940) 565-6548
                              0                       1                 2         3                 4
1941  UMSTATTD RESTAURANTS, LLC  120 WEST US HIGHWAY 54  EL DORADO SPRING      MS O    (417) 876-5755
2079               SIMONS, GARY         1412 BURLINGTON  NORTH KANSAS CIT      MY O    (816) 421-5941
2763       GRISHAM, ROBERT (RB)   403 WEST COURT STREET    WASHINGTON COU  ORTH HOU  S(E740) 335-7830
2764            STAUFFER, JACOB   403 WEST COURT STREET    WASHINGTON COU  ORTH HOU  S(E740) 335-7830

什么是数据格式不正确?显示你得到的和你期望的。你检查了我在我的帖子中提到的输出了吗,如果你只是针对第90页然后是第91页运行代码,那么你将在链接检查中得到itI检查页,但是我没有看到任何特殊的内容,我不知道搜索什么,因为我不知道数据格式不正确是什么意思。我懒得运行代码来查看输出。@furas好的,我现在编辑了我的问题。希望现在得到它更好。当我试图避免冗长的问题时:您的意思是在某些行中有[DENTON,TX],而在其他行中有[DENTON,TX]?你可以用疑问来描述它,因为它不那么容易看。您可以合并两列,然后在最后一个空格再次拆分。