我目前正在做一个项目,我的目标是获得每场NCAA男子篮球比赛的比赛分数。为了做到这一点,我需要使用python包sportsreference。我需要使用两个数据帧,一个名为df,包含游戏日期,另一个名为box_index(如下所示),包含每个游戏的唯一链接。我需要得到由每个游戏的唯一链接所取代的日期列。这些唯一的链接以日期开始(格式与df的日期列完全相同),这使得使用regex或.contains()更容易做到这一点。我一直得到Keyerror: 0错误。有人能帮我弄清楚下面我的逻辑有什么问题吗?
from sportsreference.ncaab.schedule import Schedule
def get_team_schedule(name):
combined =Schedule(name).dataframe
box_index = combined["boxscore_index"]
box = box_index.to_frame()
#print(box)
for i in range(len(df)):
for j in range(len(box)):
if box.loc[i,"boxscore_index"].contains(df.loc[i, "date"]):
df.loc[i,"date"] = box.loc[i,"boxscore_index"]
get_team_schedule("Virginia")
看起来像"box"one_answers";df"由于要遍历所有行,因此使用iterrows
(而不是使用".loc"按索引搜索)
for i, row_df in df.iterrows():
for j, row_box in box.iterrows():
if row_box["boxscore_index"].contains(row_df["date"]):
df.at[i, 'date'] = row_box["boxscore_index"]
".at"函数将覆盖给定单元格中的值
只是告诉你,iterrows比.loc.
更有效,但是itertuples大约快10倍,zip大约快100倍。
Keyerror: 0 error
表示您无法在索引0处获得该行,因为使用box.loc[i,"boxscore_index"]
没有索引值为0(索引值是日期,例如'2020-12-22-14-virginia'
)。你可以使用.iloc.
,就像box.iloc[i]["boxscore_index"]
一样。你必须把所有的.loc
转换成那个
df
数据框。我对df
看起来像什么做了一些假设,所以如果这不起作用,或者不是你想做的,请分享df
的一些示例行:
from sportsreference.ncaab.schedule import Schedule
def get_team_schedule(name):
combined = Schedule(name).dataframe
box_index_list = list(combined["boxscore_index"])
for box_index in box_index_list:
temp_game_data = df[df["date"] == boxscore_index]
print(box_index)
print(temp_game_data,'n')
get_team_schedule("Virginia")