Html-tabellen lezen met panda's (inclusief een voorbeeld)
U kunt de functie pandas read_html() gebruiken om HTML-tabellen in een pandas DataFrame te lezen.
Deze functie gebruikt de volgende basissyntaxis:
df = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ')
In het volgende voorbeeld ziet u hoe u deze functie kunt gebruiken om een tabel met NBA-teamnamen van deze Wikipedia-pagina te lezen.
Voorbeeld: Lees een HTML-tabel met Pandas
Voordat u de functie read_html() gebruikt, moet u waarschijnlijk lxml installeren:
pip install lxml
Opmerking : als u een Jupyter-notebook gebruikt, moet u de kernel opnieuw opstarten nadat u deze installatie hebt uitgevoerd.
Vervolgens kunnen we de functie read_html() gebruiken om elke HTML-tabel op deze Wikipedia-pagina te lezen:
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
We kunnen zien dat er in totaal 44 HTML-tabellen op deze pagina zijn gevonden.
Ik weet dat de tabel waarin ik geïnteresseerd ben het woord ‚Divisie‘ bevat, dus ik kan het matchargument gebruiken om alleen HTML-tabellen op te halen die dit woord bevatten:
#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
Ik kan dan de namen van de tabelkolommen vermelden :
#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')]
Ik ben alleen geïnteresseerd in de eerste twee kolommen, dus ik kan het DataFrame filteren zodat het alleen deze kolommen bevat:
#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
De finaletafel bevat alleen de kolommen ‘Divisie’ en ‘Team’.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere bestandstypen in panda’s kunt lezen:
Hoe een tekstbestand te lezen met Panda’s
Excel-bestanden lezen met Panda’s
Hoe CSV-bestanden te lezen met Panda’s