使用.loc访问DataFrame列触发KeyError,无.loc则出警告的问题咨询
问题分析与解决
错误原因
你遇到的KeyError是因为.loc的用法错误:.loc的语法规则是df.loc[行标签, 列标签],如果只传入单个参数,默认是匹配行索引标签。你写win_data.loc['PTS_home']时,pandas会尝试寻找行索引为PTS_home的行,但你的数据中PTS_home是列名而非行索引,因此找不到对应行,触发KeyError。
去掉.loc后能运行但出现警告,是因为win_data是原DataFramedf的切片视图,直接赋值win_data['SMA5'] = ...时,pandas无法确定你是否要修改原数据的视图还是切片副本,因此抛出SettingWithCopyWarning。
正确解决方案
方案1:显式复制切片,避免视图问题
创建win_data时用.copy()生成独立副本,之后直接赋值就不会触发警告:
win_data = df.loc[df['HOME_TEAM_WINS'] == 1].copy() win_data['SMA5'] = win_data['PTS_home'].rolling(5).mean()
方案2:全程用.loc规范赋值
用.loc[:, 列名]指定列,同时赋值时也用.loc明确操作原切片,既避免KeyError也消除警告:
win_data = df.loc[df['HOME_TEAM_WINS'] == 1] win_data.loc[:, 'SMA5'] = win_data.loc[:, 'PTS_home'].rolling(5).mean()
内容的提问来源于stack exchange,提问作者Sepid
相关产品推荐
相关产品推荐

