大学橄榄球数据分析:获取星级球员计数时遇TypeError问题
问题描述
我需要统计数据集teams_join_recruits['Stars']中各星级球员的数量,但运行倒数第二个代码单元时触发了TypeError,已完成最小可复现验证。
相关代码与说明
数据读取与类型检查代码
# 导入pandas import pandas as pd # 设置显示选项 pd.set_option('display.max_rows', 1000); pd.set_option('display.max_columns', 1000); pd.set_option('display.width', 1000) # 读取数据集 teams_join_recruits = pd.read_csv(r'C:\Users\sjohn\OneDrive\Documents\D195 Capstone\DataFrames\teams_join_recruits.csv', index_col=False) df_teams_typeerror = pd.read_csv(r'C:\Users\sjohn\OneDrive\Documents\D195 Capstone\DataFrames\df_teams_typeerror.csv', index_col=False) df_recruits_typeerror = pd.read_csv(r'C:\Users\sjohn\OneDrive\Documents\D195 Capstone\DataFrames\df_recruits_typeerror.csv', index_col=False) # 查看数据类型与缺失值情况 df_recruits_typeerror.info() df_teams_typeerror.info() teams_join_recruits.info()
数据合并说明
球队与招募球员数据的合并操作已在另一笔记本中完成,代码如下(仅作注释说明):
# 合并两个DataFrame teams_join_recruits = pd.concat([df_teams2013_2020, df_cfb_recruits], ignore_index=True)
星级计数尝试代码(触发TypeError的单元)
参考@Max888的方法,尝试用pivot_table统计星级数量,我的数据集有2500+行,以下是最小复现代码:
# 导入pandas import pandas as pd # 创建示例DataFrame players = pd.DataFrame({ 'year': [2010, 2010, 2010, 2010, ...], 'stars': ['5', '5', '5', '5', ...], 'team': ['Florida State', 'Florida State', 'Miami', 'Miami', ...], 'player': ['Dorial Green-Beckham', 'Johnathan Gray', 'Stefon Diggs', 'Jameis Winston', ...]})
# 透视表操作 table1 = pd.pivot_table(players, values='player', index=['stars'], columns=['team', 'year'], aggfunc= 'count') print(table1) # 此单元触发TypeError
另一种尝试代码(参考@Prudhviraj)
# 导入pandas库 import pandas as pd # 步骤1:初始化球队数据集的星级球员计数 teams_data = { 'team': ['Team A', 'Team B', 'Team C'], 'year': [2013, 2014, 2015], '4_5Stars': [0, 0, 0], '2_3Stars': [0, 0, 0] } teams_df = pd.DataFrame(teams_data) star_counts = {} for _, row in teams_df.iterrows(): key = (row['team'], row['year']) star_counts[key] = {'4_5Stars': 0, '2_3Stars': 0} # 步骤2:遍历招募球员数据集,更新星级计数 recruits_data = {'player': ['Player 1', 'Player 2', 'Player 3'], 'stars': [4, 5, 3], 'year': [2013, 2013, 2014], 'team': ['Team A', 'Team A', 'Team B'] } recruits_df = pd.DataFrame(recruits_data) for _, row in recruits_df.iterrows(): key = (row['team'], row['year']) if row['stars'] >= 4: star_counts[key]['4_5Stars'] += 1 elif row['stars'] >= 2: star_counts[key]['2_3Stars'] += 1 # 步骤3:更新球队数据集的星级计数 for _, row in teams_df.iterrows(): key = (row['team'], row['year']) teams_df.loc[(_, '4_5Stars')] = star_counts[key]['4_5Stars'] teams_df.loc[(_, '2_3Stars')] = star_counts[key]['2_3Stars'] print(teams_df)
注:上述代码中的示例球队名(如Team A)和球员名(如Player 1)后续会替换为我数据中的2000+真实球队名称。
需要更多信息请告知。
内容的提问来源于stack exchange,提问作者sjohnp2112
相关产品推荐
相关产品推荐

