Как создать Pandas DataFrame из проанализированного кода, используя bs4 / selenium на Python? - PullRequest
0 голосов
/ 30 октября 2019

Я проанализировал таблицу и хотел бы преобразовать две из этих переменных в DataFrame Pandas для печати в Excel.

К вашему сведению: Я задавал похожий вопрос, однако на него не было дано исчерпывающего ответа. Там не было никаких предложений о том, как создать Pandas DataFrame. В этом весь смысл моего вопроса.

Осторожно : есть небольшая проблема с данными, которые я проанализировал. Данные содержат «КОМАНДУ» и «SA / G» несколько раз в выходных данных.

Первая переменная, которую я хотел бы видеть в DataFrame, это 'TEAM'.

Вторая переменная, которую я хотел бы видеть в DataFrame, это 'SA / G'.

Вот мой код:

# imports
from selenium import webdriver      
from bs4 import BeautifulSoup

# make a webdriver object
driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')

# open some page using get method       - url -- > parameters
driver.get('http://www.espn.com/nhl/statistics/team/_/stat/scoring/sort/avgGoals')

# driver.page_source
soup = BeautifulSoup(driver.page_source,'lxml')
#close driver
driver.close()
#find table
table = soup.find('table')
#find_all table rows
t_rows = table.find_all('tr')
#loop through tr to find_all td
for tr in t_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    # print(row)
    # print(row[9])
    # print(row[1], row[9])

    team = row[1]
    sag = row[9]

    # print(team, sag)
    data = [(team, sag)]
    print(data)

Вот окончательный вывод, который я хотел бы распечатать, чтобы преуспеть, используя опцию Pandas DataFrame:

Team           SA/G
Nashville      30.1
Colorado       33.6
Washington     31.0
...             ...

Заранее спасибо за любую помощь, котораяВы можете предложить. Я все еще учусь и ценю любые отзывы, которые я могу получить.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Похоже, вы хотите создать DataFrame из списка кортежей, на который уже дан ответ здесь . Я бы изменил ваш код следующим образом:

# Initial empty list
data = []
#loop through tr to find_all td
for tr in t_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    team = row[1]
    sag = row[9]
    # Add tuple containing one row of data
    data.append((team, sag))
# Create df from list of tuples
df = pd.DataFrame(data, columns=['Team', 'SA/G'])
# Remove lines where Team value is "TEAM"
df = df[df["Team"] != "TEAM"]

РЕДАКТИРОВАТЬ: Добавить строку для удаления ("TEAM", "SA / G") строк в df

1 голос
/ 30 октября 2019

Сначала внутри цикла for добавьте кортежи в список (вместо того, чтобы делать data = [(x, y)], объявите переменную данных перед циклом как список data = list() и добавьте кортежи в список в цикле. data.append((x,y))) и выполните следующие действия:

import pandas as pd
data=[("t1","sag1"),("t2","sag2"),("t3","sag3")]
df = pd.DataFrame(data,columns=['Team','SA/G'])
print(df)
...