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