Comment lire des tableaux HTML avec Pandas (y compris un exemple)
Vous pouvez utiliser la fonction pandas read_html() pour lire des tableaux HTML dans un pandas DataFrame.
Cette fonction utilise la syntaxe de base suivante :
df = pd.read_html('https://en.wikipedia.org/wiki/National_Basketball_Association')
L’exemple suivant montre comment utiliser cette fonction pour lire un tableau des noms d’équipes NBA de cette page Wikipédia .
Exemple : Lire un tableau HTML avec Pandas
Avant d’utiliser la fonction read_html() , vous devrez probablement installer lxml :
pip install lxml
Remarque : Si vous utilisez un notebook Jupyter, vous devez redémarrer le noyau après avoir effectué cette installation.
Ensuite, nous pouvons utiliser la fonction read_html() pour lire chaque tableau HTML de cette page Wikipédia :
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
Nous pouvons voir qu’un total de 44 tableaux HTML ont été trouvés sur cette page.
Je sais que le tableau qui m’intéresse contient le mot « Division », je peux donc utiliser l’argument match pour récupérer uniquement les tableaux HTML contenant ce mot :
#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
Je peux alors lister les noms des colonnes du tableau :
#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')]
Je ne m’intéresse qu’aux deux premières colonnes, je peux donc filtrer le DataFrame pour qu’il ne contienne que ces colonnes :
#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
Le tableau final ne contient que les colonnes « Division » et « Équipe ».
Ressources additionnelles
Les tutoriels suivants expliquent comment lire d’autres types de fichiers dans pandas :
Comment lire un fichier texte avec Pandas
Comment lire des fichiers Excel avec Pandas
Comment lire des fichiers CSV avec Pandas