Come leggere le tabelle html con pandas (incluso un esempio)
È possibile utilizzare la funzione panda read_html() per leggere le tabelle HTML in un DataFrame panda.
Questa funzione utilizza la seguente sintassi di base:
df = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ')
L’esempio seguente mostra come utilizzare questa funzione per leggere una tabella di nomi di squadre NBA da questa pagina Wikipedia .
Esempio: leggere una tabella HTML con Panda
Prima di utilizzare la funzione read_html() , probabilmente dovrai installare lxml:
pip install lxml
Nota : se si utilizza un notebook Jupyter, è necessario riavviare il kernel dopo aver eseguito questa installazione.
Successivamente, possiamo utilizzare la funzione read_html() per leggere ogni tabella HTML su questa pagina 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
Possiamo vedere che in questa pagina sono state trovate un totale di 44 tabelle HTML.
So che la tabella che mi interessa contiene la parola “Division”, quindi posso utilizzare l’argomento match per recuperare solo le tabelle HTML contenenti questa parola:
#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 quindi elencare i nomi delle colonne della tabella:
#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')]
Sono interessato solo alle prime due colonne, quindi posso filtrare DataFrame per contenere solo queste colonne:
#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
Il tavolo finale contiene solo le colonne “Divisione” e “Squadra”.
Risorse addizionali
I seguenti tutorial spiegano come leggere altri tipi di file in panda:
Come leggere un file di testo con Pandas
Come leggere file Excel con Panda
Come leggere file CSV con Pandas