Pandas使用drop()时出现KeyError:列名未在轴中找到
问题分析与解决
1. 代码失效的核心原因
你写的df.drop(all_matches[df['HomeTeam'] != df['team']])完全用错了drop()的逻辑:drop()默认是删除指定的行索引或列名,但你直接传入了布尔索引筛选后的子DataFrame,它会把这个子DataFrame的所有列名当成要删除的列,自然触发KeyError——它根本找不到这些"要删除的列"。
正确的写法是直接用布尔索引筛选保留符合条件的行:
# 保留HomeTeam与team匹配的行,可覆盖原DataFrame或存为新变量 df = df[df['HomeTeam'] == df['team']]
如果非要用drop(),得明确指定要删除的是不符合条件的行索引:
df = df.drop(df[df['HomeTeam'] != df['team']].index)
2. 错误信息里的换行符问题
错误信息中的\n不是你的列名真的带有换行符,只是Python打印长列表时自动换行的格式符号。因为列名太多,一行显示不下才拆成多行,实际你的列名都是正常的,不用处理。
额外去重思路
既然每场比赛对应两行记录,除了按HomeTeam和team匹配筛选,还可以用比赛的唯一标识(比如日期+对阵双方)做去重,逻辑更稳妥:
# 按日期、主客场队名去重,保留第一行 df = df.drop_duplicates(subset=['date', 'HomeTeam', 'AwayTeam'], keep='first')
内容的提问来源于stack exchange,提问作者gp12
相关产品推荐
相关产品推荐

