Создание списка вместо массива - PullRequest
1 голос
/ 19 апреля 2020

Я очень плохо знаком с Python и даже не уверен, правильно ли я сформулировал название. Я пытаюсь получить набор данных с двухлетней статистикой (один под другим). Это не работает, потому что переменная «таблица» является массивом, я полагаю, где данные за каждый год являются своим собственным элементом. Если я удаляю две строки кодов (указанные ниже как «Line1» и «Line2», я получаю оба года, но без правильной формы; однако, я использую длину переменной «thm», чтобы определить количество строк в году и затем используйте функцию изменения формы numpy, прежде чем я добавлю ее в переменную table. Спасибо.

import bs4
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import numpy as np

table=[]

for i in range(1956,1958):
  url="https://www.basketball-reference.com/draft/NBA_{}.html#stats::none".format(i)

  soup=BeautifulSoup(urlopen(url), "html.parser")

  thm=[]
  for tag in soup.find_all("tr"):
    list=tag.find("th", class_="right")
    if list:
      thm.append(list.text)

  mtable1=[]
  trs=soup.find_all("tr")
  for tr in trs:
    tds=tr.find_all("td")
    for td in tds:
      mtable1.append(td.text)

  #Line1
  mtable2=[mtable1]
  #Line2
  mtable3=np.reshape(mtable2,[len(thm),21])

  table.append(mtable3)

data=pd.DataFrame(table)

data.to_csv("data.csv")

1 Ответ

0 голосов
/ 22 апреля 2020

Нашел ответ. Мне нужно было только преобразовать массив в список, а затем расширить список в последующие годы путем итерации.

import bs4
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import numpy as np

table=[]

for i in range(1956,1958):
  url="https://www.basketball-reference.com/draft/NBA_{}.html#stats::none".format(i)

  soup=BeautifulSoup(urlopen(url), "html.parser")

  #Obtaining table's headers
  tag1=soup.find_all("tr")[1]
  header=[]
  for tag in tag1.find_all("th"):
    list1=tag.text
    if list1:
     header.append(list1)
  header=header[1:]
  #Creating another column for the year of the draft
  header.append("Year")

  thm=[]
  for tag in soup.find_all("tr"):
    list=tag.find("th", class_="right")
    if list:
      thm.append(list.text)

  mtable1=[]
  trs=soup.find_all("tr")
  for tr in trs:
    tds=tr.find_all("td")
    for td in tds:
      mtable1.append(td.text)

  mtable2=[mtable1]
  mtable3=np.reshape(mtable2,[len(thm),21])
  mtable4=mtable3.tolist()
  for row in mtable4:
    row.append(i)
  table.extend(mtable4)

data=pd.DataFrame(table, columns=header)
data.to_csv("data.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...