You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大学橄榄球数据分析:获取星级球员计数时遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:20:43