使用python将pdf表格合并成一个excel表格
我使用tabla来表示下面的所有表格 是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
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]?你可以用疑问来描述它,因为它不那么容易看。您可以合并两列,然后在最后一个空格再次拆分。