Вы можете использовать функцию pandas read_html() для чтения HTML-таблиц в pandas DataFrame.
Эта функция использует следующий базовый синтаксис:
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-таблицы.
Я знаю, что интересующая меня таблица содержит слово «Division», поэтому я могу использовать аргумент 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