Как читать html-таблицы с помощью pandas (включая пример)
Вы можете использовать функцию pandas read_html() для чтения HTML-таблиц в DataFrame pandas.
Эта функция использует следующий базовый синтаксис:
df = pd. read_html (' https://en.wikipedia.org/wiki/National_Basketball_Association ')
В следующем примере показано, как использовать эту функцию для чтения таблицы названий команд НБА с этой страницы Википедии .
Пример: чтение HTML-таблицы с помощью Pandas
Прежде чем использовать функцию read_html() , вам, вероятно, потребуется установить lxml:
pip install lxml
Примечание . Если вы используете ноутбук Jupyter, после выполнения этой установки необходимо перезапустить ядро.
Далее мы можем использовать функцию read_html() для чтения каждой таблицы HTML на этой странице Википедии :
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
Мы видим, что на этой странице найдено всего 44 HTML-таблицы.
Я знаю, что интересующая меня таблица содержит слово «Деление», поэтому я могу использовать аргумент match для получения только таблиц HTML, содержащих это слово:
#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
Затем я могу перечислить имена столбцов таблицы:
#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')]
Меня интересуют только первые два столбца, поэтому я могу отфильтровать DataFrame, чтобы он содержал только эти столбцы:
#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
Итоговая таблица содержит только столбцы «Подразделение» и «Команда».
Дополнительные ресурсы
В следующих руководствах объясняется, как читать файлы других типов в pandas:
Как прочитать текстовый файл с помощью Pandas
Как читать файлы Excel с помощью Pandas
Как читать файлы CSV с помощью Pandas