微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Python将pdf表连接到一个excel表

如何解决使用Python将pdf表连接到一个excel表

我正在使用tabula是为了在接下来的pdf fileconcat全部tables

成为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)

当前输出check

但是从页面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)

enter image description here

示例

from tabula import read_pdf
import pandas as pd

table = read_pdf("goal.pdf",pages='90-91',index=False)

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

从第48行开始,您将看到区别here

您将在此处注意到将名称和地址放在一个单元格中的问题。而城市和州也可以一次通话

解决方法

我研究了源代码,它具有选项columns,您可以手动定义列边界。设置<v-text-field label="Search" v-model="search" @input="handleSearch" > </v-text-field> <v-treeview ref="tree" :items="tree" :search="search" :open.sync="open" open-on-click hoverable> </v-treeview> data(){ return{ search: '',open: [1],allOpened: false,lastOpen: [] } } handleSearch: function (val) { if (val) { if (!this.allOpened) { this.lastOpen = this.open; this.allOpened = true; this.$refs.tree.updateAll(true); } } else { this.$refs.tree.updateAll(false); this.allOpened = false; this.open = this.lastOpen; } } 时,您必须使用columns

guess=False使用程序tabula-java,在其文档中,我发现它需要以百分比或点(而非像素)为单位的值。因此,我使用程序inkscape来测量点的边界。

enter image description here

tabula-py

结果:

from tabula import read_pdf
import pandas as pd

# display all columns in dataframe
pd.set_option('display.width',None)

columns = [210,350,420,450]  # boundaries in points
#columns = ['210,450']   # boundaries in points

pages =  '90-92'
#pages = [90,91,92]
#pages = list(range(90,93))
#pages = 'all'  # read all pages 

tables = read_pdf("goal.pdf",pages=pages,pandas_options={'header': None},columns=columns,guess=False)

df = pd.concat(tables).reset_index(drop=True)
#df.rename(columns=df.iloc[0],inplace=True)  # convert first row to headers
#df.drop(df.index[0],inplace=True)           # remove first row with headers 

# display

#for x in range(0,len(df),20):
#    print(df.iloc[x:x+20])
#    print('----------')

print(df.iloc[45:50])

#df.to_csv('output-pdf.csv')

#print(df[ df['State'].str.contains(' ') ])
#print(df[ df.iloc[:,3].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 (以磅为单位)来跳过标题。否则,您将不得不删除首页上的第一行。

我没有检查所有行,但是可能需要对列边界进行一些更改。


编辑:

很少有行会引起问题-可能是因为area中的文本太长了。

City

结果:

col3 = df.iloc[:,3]

print(df[ col3.str.contains(' ') ])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?