我正在组合使用beautifulsoup和pandas来尝试通过循环boxscore页面,获取每个团队的数据框并将它们连接在一起来获取体育参考数据。我注意到表格在每一页上的格式化方式,有行分隔符将启动程序与储备分开,并且此行分隔符在“起始程序”列中具有值“ Reserves”(我后来将其重命名为“ Player_Name”) ,其余的列标题重复其其余值。当此数据输入到数据帧中时,将行分隔符作为普通行引入。我想添加一个单独的列,该列包含该玩家是否开始游戏的Y / N值,并删除“启动器”列等于“储备金”的所有记录。
我尝试添加一列,但是我在努力使前x个行的默认值为“ Y”,其余行的默认值为“ N”。
这里是该表的简短示例,后面是我正在使用的代码。让我知道您是否有任何想法!
编辑:我可能已经简化了这一点,因为实际上有两个标题列,并且在尝试提出的解决方案时,这似乎引起了问题。如何删除仅显示“基本框分数统计”和“高级框分数统计”的第一标题栏?
Basic Box Score Stats Advanced Box Score Stats
Starters MP FG +/- xyz%
Player1 20:00 17 5 12
Player2 15:00 8 4 10
Player3 10:00 9 3 8
Player4 9:00 3 2 6
Player5 8:00 1 1 4
Reserves MP FG +/- xyz%
Player4 7:00 1 1 2
Player5 4:00 1 1 2
Player6 3:30 1 1 2
import pandas as pd
from bs4 import BeautifulSoup
#performed steps in bs4 to get the links to individual boxscores
for boxscore_link in boxscore_links:
basketball_ref_dfs=pd.read_html(MainURL + boxscore_link)
if len(basketball_ref_dfs) = 4:
away_team_stats = pd.concat([basketball_ref_dfs[0],basketball_ref_dfs[1]])
home_team_stats = pd.concat([basketball_ref_dfs[2],basketball_ref_dfs[3]])
else:
away_team_stats = basketball_ref_dfs[0]
home_team_stats = basketball_ref_dfs[1]
#new code to be added here to fix 'reserve' row header for away/home_team_stats
full_game_stats = pd.concat([away_team_stats,home_team_stats])
full_season_stats = full_season_stats.append(full_game_stats,ignore_index=True)
full_season_stats
#what I want:
away_team_stats['Starter']='Y' # + some condition to only set this value for the first x occurrences or set to 'Y' until row value equals Reserve, then set remaining to 'N'
答案 0 :(得分:0)
您可以通过以下三个步骤进行操作:
away_team_stats['Starter']='N'
iloc
和away_team_stats.iloc[:x, 2]='Y'
方法将前x行的值设置为'Y'
(我相信,如果将“入门”列附加到示例数据中,则该列将位于位置2,但您可能需要对其进行编辑)'Player_Name' == 'Reserves'
的{{1}}方法删除loc
的行 away_team_stats = away_team_stats.loc[away_team_stats['Player_Name']!='Reserves', :]
方法将按数字索引/列来切片数据框,而iloc
方法将按索引/列标签来切片数据框
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
答案 1 :(得分:0)
您可以这样做,如果您知道索引已经显示“保留”值的位置,那么在这种情况下,假设它出现在第10条记录中。最初,我将所有内容都设置为“ N”,然后将前10行设置为“ Y”。
away_team_stats['Starter'] = 'N'
away_team_stats.loc[:9, 'Starter'] = 'Y'
idx = away_team_stats.loc[away_team_stats['Starter'] == 'Reserve'].index[0]
这为您提供了首次显示“预留”索引的位置。
您现在可以如上所述进行操作:
away_team_stats.loc[:idx, 'Starter'] = 'Y'
away_team_stats.loc[idx+1:, 'Starter'] = 'N'
将前几行设置为直到第一次出现“保留”一词,然后将其余行设置为“ N”。