Как пропустить столбцы при создании pandas DataFrame из bs4? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь удалить таблицу с веб-сайта, используя Python и BeautifulSoup4. Затем я хочу вывести таблицу, но я хочу пропустить первые 5 столбцов таблицы. Вот мой код

def scrape_data():
    url1 = "https://basketball-reference.com/leagues/NBA_2020_advanced.html"
    html1 = urlopen(url1)
    soup1 = bs(html1, 'html.parser')
    soup1.findAll('tr', limit = 2)
    headers1 = [th.getText() for th in soup1.findAll('tr', limit = 2)[0].findAll('th')]
    headers1 = headers1[5:]
    rows1 = soup1.findAll('tr')[1:]
    player_stats = [[td.getText() for td in rows1[i].findAll('td')]for i in range(len(rows1))]
    stats1 = pd.DataFrame(player_stats, columns=headers1)
    return stats1

И ошибка, которую я получаю: ValueError: 24 columns passed, passed data had 28 columns

Я знаю, что ошибка исходит от stats1 = pd.DataFrame(player_stats, columns=headers1)

Но как я могу это исправить

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Просто используйте iloc на результирующем кадре данных. Обратите внимание, что read_html возвращает список фреймов данных, хотя на этот URL-адрес есть только один. Вам необходимо получить доступ к этому единственному фрейму данных через pd.read_html(url)[0]. Затем просто используйте iloc, чтобы игнорировать первые пять столбцов.

url = "https://basketball-reference.com/leagues/NBA_2020_advanced.html"
df = pd.read_html(url)[0].iloc[:, 5:]
0 голосов
/ 03 февраля 2020

Я решил это благодаря помощи @JonClements. Мой рабочий код

def scrape_data():
    url1 = "https://basketball-reference.com/leagues/NBA_2020_advanced.html"
    html1 = urlopen(url1)
    soup1 = bs(html1, 'html.parser')
    soup1.findAll('tr', limit = 2)
    headers1 = [th.getText() for th in soup1.findAll('tr', limit = 2)[0].findAll('th')]
    headers1 = headers1[5:]
    rows1 = soup1.findAll('tr')[1:]
    player_stats = [[td.getText() for td in rows1[i].findAll('td')[4:]]for i in range(len(rows1))]
    stats1 = pd.DataFrame(player_stats, columns=headers1)
    return stats1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...