Como ler tabelas html com pandas (incluindo um exemplo)


Você pode usar a função pandas read_html() para ler tabelas HTML em um DataFrame do pandas.

Esta função usa a seguinte sintaxe básica:

 df = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ')

O exemplo a seguir mostra como usar esta função para ler uma tabela de nomes de times da NBA nesta página da Wikipedia .

Exemplo: Leia uma tabela HTML com Pandas

Antes de usar a função read_html() , você provavelmente precisará instalar o lxml:

 pip install lxml

Nota : Se você estiver usando um notebook Jupyter, deverá reiniciar o kernel após realizar esta instalação.

A seguir, podemos usar a função read_html() para ler cada tabela HTML nesta página da Wikipedia :

 import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
from unicodedata import normalize

#read all HTML tables from specific URL
tabs = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ')

#display total number of tables read
len (tabs)

44

Podemos ver que um total de 44 tabelas HTML foram encontradas nesta página.

Eu sei que a tabela na qual estou interessado contém a palavra “Divisão”, então posso usar o argumento match para recuperar apenas tabelas HTML que contenham esta palavra:

 #read HTML tables from specific URL with the word "Division" in them
tabs = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ',
                    match=' Division ')

#display total number of tables read
len (tabs)

1

Posso então listar os nomes das colunas da tabela:

 #define table
df = tabs[0]

#list all column names of table
list (df)

[('Division', 'Eastern Conference'),
 ('Team', 'Eastern Conference'),
 ('Location', 'Eastern Conference'),
 ('Arena', 'Eastern Conference'),
 ('Capacity', 'Eastern Conference'),
 ('Coordinates', 'Eastern Conference'),
 ('Founded', 'Eastern Conference'),
 ('Joined', 'Eastern Conference'),
 ('Unnamed: 8_level_0', 'Eastern Conference')]

Estou interessado apenas nas duas primeiras colunas, então posso filtrar o DataFrame para conter apenas estas colunas:

 #filter DataFrame to only contain first two columns
df_final = df. iloc [:, 0:2]

#rename columns
df_final. columns = [' Division ', ' Team ']

#view first few rows of final DataFrame
print ( df_final.head ())

   Division Team
0 Atlantic Boston Celtics
1 Atlantic Brooklyn Nets
2 Atlantic New York Knicks
3 Atlantic Philadelphia 76ers
4 Atlantic Toronto Raptors

A tabela final contém apenas as colunas “Divisão” e “Equipe”.

Recursos adicionais

Os tutoriais a seguir explicam como ler outros tipos de arquivos no pandas:

Como ler um arquivo de texto com Pandas
Como ler arquivos Excel com Pandas
Como ler arquivos CSV com Pandas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *