因此,我使用這段代碼的目的是提取我的NFL球隊中一名新秀的資訊,并將他的表現與上賽季在他的位置上完成前10名統計的球員進行比較,當時他們在第一個賽季中打了超過10場比賽。
為此,我參考了Towards DS的一個帖子,他們解釋了如何刮取NFL的資料。
所以,我最終遇到問題的代碼看起來是這樣的
#url page。
url_mac = 'https://www.pro-football-reference.com/years/2021/passing.htm'/span>
#open URL with BS
html_mac = urlopen(url_mac)
stats_macpage = BeautifulSoup(html_mac)
#collecting table rows[/span].
column_headers = stats_macpage.findAll('tr') [0]
column_headers = [i.getText() for i in column_headers.findAll('th')]
#getting stats of each row)
rows = stats_macpage.findAll('tr') [1:]
qb_stats = []
for i in range(len(rows))。
qb_stats.append([col.getText() for col in rows[i].findAll('td') ])
#創建資料框架 #創建資料框架
data = pd.DataFrame(qb_stats, columns = column_headers[1:] )
#rename column of sack yards from yards to y_sack.
new_columns = data.columns.values
new_columns[-6] = 'y_sack'
data.columns = new_columns
#selecting specifics stats=
categories = ['Cmp%'/span>, 'Yds'/span>, 'TD'/span>, 'Int', 'Y/A', 'rate']
#first filter'Player', 'Tm'] 類別]。
#selecting specific player 'Player'/span>] == 'Mac Jones'/span>]
我為我想要的所有11名球員做了資料,并在最后進行了串聯,但你可以想象我的代碼看起來有多糟糕。
我怎樣才能改進它以創建一個回圈?我已經嘗試了一些方法,但所有這些想法都不奏效,或者超出了我創建一個好代碼的能力。 我的想法是把過去20年的所有資料按年份找出來,但這看起來有點不必要,因為我已經知道我想要什么年份。我的問題具體在這一部分,因為在最后我可以創建一個串列,然后用一個 "if",只取串列中每個球員打了> 10場比賽的第一年。
url_mac = 'https://www.pro-football-reference.com/years/2021/passing.htm'/span>
謝謝大家。
uj5u.com熱心網友回復:
要將2011-2021年的所有表格加載到一個資料框中,你可以使用這個例子:
import pandas as pd
# url page
url_mac = "https://www.pro-football-reference.com/years/{}/passing.htm"。
all_dfs = []
for year in range(2011, 2022)。
print("Getting table for year {}".format(year))
df = pd.read_html(url_mac.format(year))[0]
df = df[~df["Rk"].eq("Rk")]
df["Year"] = year
all_dfs.append(df)
df = pd.concat(all_dfs)
print(df)
df.to_csv("data.csv", index=False)
印刷品:
Rk Player Tm Age Pos G GS QBrec Cmp Att Cmp% Yds TD TD% Int Int% 1D Lng Y/A AY/C Y/G Rate QBR Sk Yds.1 NY/A ANY/A Sk% 4QC GWD Year
0 1 Drew Brees* NOR 32 QB 16 16 13-3-0 468 657 71.2 5476 46 7.0 14 2.1 279 79 8.3 8.8 11.7 342.3 110.6 82.3 24 158 7.81 8.23 3.5 3 2011 4
1 2 Tom Brady* NWE 34 QB 16 16 13-3-0 401 611 65.6 5235 39 6.4 12 2.0 262 99 8.6 9.0 13.1 327.2 105.6 73.8 32 173 7.87 8.25 5.0 1 2 2011年
2 3 Matthew Stafford DET 23 QB 16 16 10-6-0 421 663 63.5 5038 41 6.2 16 2.4 243 73 7.6 7.7 12.0 314.9 97.2 60.5 36 257 6.84 6.98 5.2 3 4 2011年
3 4 Eli Manning* NYG 30 QB 16 16 9-7-0 359 589 61.0 4933 29 4.9 16 2.7 218 99 8.4 8.1 13.7 308.3 92.9 64.2 28 199 7.67 7.45 4.5 5 2011 6
...
并保存data.csv(來自LibreOffice的螢屏截圖):
uj5u.com熱心網友回復:
使用pandas來決議這些表格。只需在url中回圈查看季節(不要忘記在資料框中添加,否則你將不知道哪些行是什么季節的:
import pandas as pd
# To get last 10 seasons[/span].
years_look_back =10
years_list = list(range(2021, 2021-(year_look_back 1),-1)
years_list.reverse()
# 或者只做一個特定年份的串列:。
years_list = [2001, 2005, 2008, 2010, 2011, 2015]
cols = ['Player', 'Tm','Cmp%', 'Yds', 'TD'/span>, 'Int'/span>, 'Y/A'/span>, 'Rate'/span>]
df_list = []
for year in years_list:
url_mac = f'https://www.pro-football-reference.com/years/{year}/passing.htm'。
temp_df = pd.read_html(url_mac)[0] [cols]
temp_df['Season'] =年份
temp_df = temp_df[~temp_df["Player"].eq("Player")]
df_list.append(temp_df)
print(f'Collect: {year}')
data_radar = pd.concat(df_list)
#selecting specific player。
data_mac = data_radar[data_radar['Player'/span>] == 'Mac Jones'/span>]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333350.html
標籤:
上一篇:FastAPI 學習之路(四十四)路徑操作的高級配置
下一篇:noj->電子老鼠走迷宮

