#python #pandas
Вопрос:
Я пытаюсь создать веб-сайт, но не понимаю, почему col[5]
он находится за пределами индекса. Любая идея, как я должен добавлять разные столбцы в фрейм данных, так как на данный момент я застрял только с 1.
url = "https://www.metasrc.com/5v5/6.24/stats"
html_data = requests.get(url).text
soup = BeautifulSoup(html_data,"html5lib")
tables = soup.find_all("tbody")
df = pd.DataFrame(columns=["champ","winrate"])
for k in tables[0].find_all("tr"):
col = k.find_all("td")
champ =col[0]
winrate=col[5]
df = df.append({"champ":champ, "winrate" : winrate}, ignore_index=True)
Комментарии:
1. Каждый ли раз вы делали первый очевидный шаг к печати
col
? Очевидно, что в одной из ваших строк нет 6 столбцов.2. Да, есть строка, в которой есть первый столбец
colspan=10
. Все, что вам нужно сделать, этоif len(col) < 6: continue
. Это должно было быть очевидно,.3. Как я уже сказал, довольно новичок в кодировании, поэтому не очень ценю то, что должно и не должно быть очевидным. Тем не менее, я дам то, что вы предложили, попробовать. Правка: Похоже, кто-то удалил мое предложение о том, чтобы быть новым программистом.. Спасибо..
4. Хорошо, но все, что я сделал, это запустил ваш код
print(col)
в цикле. Это сразу же указало на проблему.5. Спасибо вам. Я не понимал, что могу это сделать.
Ответ №1:
Давайте попробуем другой подход, используя pd.read_html.
import requests
import pandas as pd
url = "https://www.metasrc.com/5v5/6.24/stats"
html_data = requests.get(url).text
dfs = pd.read_html(html_data)
print(dfs[0].head())
print(dfs[1].head())
Выход:
Name Role Tier Score Trend Win % Role % Pick % Ban % KDA
0 AatroxAatrox TOP Weak / C 61.49 999NEW 46.93% 64.39% 0.62% 0.71% 1.97
1 AatroxAatrox JUNGLE Weak / C 59.49 999NEW 44.92% 30.61% 0.29% 0.71% 2.19
2 AhriAhri MID Strong / S 78.27 999NEW 53.22% 97.08% 13.53% 1.79% 2.67
3 AkaliAkali TOP Fair / B 63.56 999NEW 48.43% 35.00% 1.21% 1.83% 1.95
4 AkaliAkali MID Fair / B 63.19 999NEW 47.50% 56.18% 1.95% 1.83% 2.06
0 1
0 Lee Sin 91.63
1 Vayne 87.10
2 Caitlyn 84.73
3 Ezreal 83.54
4 Thresh 82.65