Blog

Postado em em 8 de julho de 2021

Ler Tabelas em PDF com Python

Nessa aula vamos te ensinar como ler tabelas em PDF usando o Python, isso mesmo, vai aprender como ler e importar tabelas para o Python!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber a planilha que usamos na aula no seu e-mail, preencha:

Resumo

Nessa aula nós vamos te mostrar como ler tabelas (importar) de dentro de um PDF.

Isso é muito importante no trabalho quando você precisa trazer tabelas que estão dentro de um PDF para poder utilizar as informações, tratá-las e fazer alguma análise de dados.

Então hoje você vai aprender como fazer isso com o Python e o que fazer se tiver algum problema na hora de importar.

Como Ler Tabelas em PDF Usando Python

Esse é um processo que várias pessoas já devem ter tentado automatizar de alguma forma, não é mesmo?

Você já deve ter passado por uma situação no trabalho que tinha que obter informações de tabelas que estavam dentro de PDF, mas não sabia como automatizar isso.

Então bora pra aula que hoje vamos te mostrar como trazer essas tabelas de um PDF para o Python e assim você vai poder tratar e fazer sua análise de dados.

Extrair Tabelas de um Arquivo PDF

A ideia dessa aula é te mostrar como extrair tabelas com Python para que você possa facilitar e automatizar algumas das suas tarefas no trabalho.

OBS: Nessa aula nós vamos utilizar o Jupyter, então se você ainda não tem ele instalado basta clicar aqui que temos um post com o passo a passo de instalação dessa IDE.

IMPORTANTE: Para essa aplicação em específico recomendamos que você utilize o Jupyter, pois quando trazemos informações de tabelas elas geralmente vão vir como dataframe e o Jupyter trabalha bem com isso. Se utilizar outra IDE é possível que tenha que fazer algumas outras instalações.

O primeiro passo é fazer a instalação da biblioteca tabula-py no Python, então como está utilizando o Jupyter, basta abrir o Prompt de Comando dele e escrever pip install tabula-py.

Outro ponto importante é que você verifique se tem o Java instalado no seu computador, pois essa biblioteca vai utilizar o Java para fazer a leitura do PDF.

Então se não tiver sugiro que instale e veja se está atualizado para que o código funcione corretamente.

Vamos dar início a parte de importação das tabelas dentro do arquivo PDF.

import tabula

lista_tabelas = tabula.read_pdf("ResultadoVale.pdf", pages="all")
print(len(lista_tabelas))

Aqui estamos importando a biblioteca tabula, veja que nesse caso vamos deixá-la só como tabula ao invés de tabula-py.

Essa função do tabula.read_pdf vai precisar de 2 argumentos. O primeiro é o local/nome do arquivo e as páginas que vamos analisar.

Local/nome – Aqui se o arquivo estiver na mesma pasta (mesmo caminho) que o seu código você pode colocar apenas o nome do arquivo .pdf sem precisar inserir o caminho completo. Outro ponto importante é que você ao invés de colocar o nome do arquivo pode colocar o site que disponibilizamos já no arquivo.

Pages – Aqui você pode colocar all (todas) para pegar todas as páginas, ou pode escolher uma página em específico para analisar.

IMPORTANTE: Quando utilizamos essa leitura do PDF o Python vai retornar uma lista com as tabelas, por isso estamos utilizando o len, para verificar quantas tabelas foram encontradas dentro do nosso PDF.

IMPORTANTE 2: Esses métodos de leitura de PDF não são 100% corretos, ou seja, nem sempre vai funcionar muito bem, até porque o PDF foi feito para dificultar essa leitura automática. Então é possível que você pegue informações que não são tabelas ou até mesmo que elas venham juntas (2 tabelas em 1).

Agora vamos por exemplo analisar somente a página 11 desse arquivo e printar as tabelas para verificar se batem com o que temos no documento.

import tabula

lista_tabelas = tabula.read_pdf("ResultadoVale.pdf", pages="11")
print(len(lista_tabelas))

for tabela in lista_tabelas:
	display(tabela)
Visualizando as tabelas importadas
Visualizando as tabelas importadas

Esse é o código para verificar somente a página 11 já com uma Estrutura de Repetição For para fazer o display (print com um melhor visual) das tabelas.

Tabelas do PDF
Tabelas do PDF

E aqui temos as tabelas que temos dentro do PDF. Então nesse caso você vai notar que conseguimos extrair as tabelas que possuem as mesmas informações que temos no PDF.

Essa forma que a tabela vem é um formato de Dataframe dentro do Python, isso quer dizer que podemos utilizar os Métodos do Pandas para poder trabalhar com essas informações.

Isso quer dizer que você vai poder fazer seu tratamento de dados dentro do Python caso precise fazer alguns ajustes.

OBS: Caso você ainda não saiba nada do Pandas nós temos um post completo aqui no blog que vai te ajudar muito com isso. Assim já vai conseguir fazer seu tratamento de dados tranquilamente, basta clicar aqui para acessar o post.

Agora você vai ver que nem sempre essa leitura de tabelas funciona perfeitamente, como é o exemplo que temos na página 10 desse arquivo PDF.

lista tabelas2 = tabula.read_pdf("ResultadoVale.pdf", pages="10")
print(len(lista_tabelas2))

display(lista_tabelas2[0])
Ler Tabelas em PDF
Tabelas com problema

Veja que ao ler essa página o Python só retorna apenas 1 tabela, quando na verdade temos 2 delas.

Veja que sinalizei na linha 11 ao utilizar o display, que essa linha na verdade é o título da segunda tabela.

Então temos 2 tabelas em uma, temos alguns títulos em locais indevidos, temos colunas que existem em uma tabela, mas não na outra. Temos até o percentual na última coluna que deveriam ser 2 colunas.

Então por melhor que seja essa biblioteca ela nem sempre vai conseguir trazer tudo certo, então em alguns casos será necessário fazer o tratamento de dados para poder separar e utilizar as informações de forma correta.

A ideia então seria fazer o tratamento dessas bases, por exemplo vamos fazer o tratamento da primeira para que ela fique igual temos no PDF.

tabela - lista_tabelas2[0]
tabela.columns = tabela.iloc[0]
tabela[[0,1]] = tabela["Variação percentual"].str.split(" ", expand=True)
tabela - tabela[1:9]
tabela = tabela.set_intex("R$ milhões")
tabela.columns = tabela.iloc[0]
tabela = tabela[1:]
tabela = tabela.drop("1T21/4T20 1T21/1T20", axis=1)
display(tabela)
Tratamento da tabela
Tratamento da tabela

Aqui colocamos os cabeçalhos na posição correta, colocamos a primeira coluna como índice, separamos a última coluna nos 2 percentuais que de fato são separados.

Agora você vai ver que ela fica bem mais parecida com o que temos no PDF e pronta para ser utilizada.

Ler Tabelas em PDF
Tabela no PDF

Mas o que acontece se não conseguir reconhecer a tabela utilizando o tabula, o que fazer?

Nesse caso podemos utilizar 2 parâmetros dentro da função tabula.read_pdf. Que são os parâmetros lattice e guess.

Lembrando que esses 2 casos vão servir para testar quando a tabela não foi encontrada, mas não quer dizer que já vá funcionar logo de cara também.

# lattice
lista_df = tabula.read_pdf("ResultadoVale.pdf", pages="10", lattice=True)
display(lista_df[0])

print("*" * 10)

# guess
lista_df = tabula.read_pdf("ResultadoVale.pdf", pages="10", guess=False)
display(lista_df[0])
Ler Tabelas em PDF
Métodos para ajustar tabelas

Nesse exemplo utilizamos os 2 parâmetros na mesma página 10 e olha como ele trás a nossa tabela, então nesse caso ela fica ainda mais difícil de trabalhar.

No entanto terão casos que vai facilitar a sua vida na hora de trazer essas informações, então é sempre bom testar todos os 3 métodos antes de começar o seu tratamento de dados.

Conclusão de Como Ler Tabelas em PDF

Nessa aula nós aprendemos como importar tabelas de arquivos em PDF para o Python para que você possa utilizar essas informações para fazer suas análises de dados.

Essas análises vão poder utilizar com o pandas, pois é a melhor biblioteca para tratamento de dados.

Outro ponto importante foi a utilização de 2 métodos para auxiliar quando não conseguir encontrar as tabelas dentro do arquivo, então pode ser que tenha progresso com um desses 2!

Agora que você já sabe como importar tabelas PDF já pode começar a automatizar seus trabalhos!

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?