如何基于多条件删除DataFrame行?代码报KeyError: 'fruit'求助
问题解决:删除DataFrame中指定列不符合条件的行
错误原因
你的drop语句逻辑完全错误:
- 变量
X已经是要删除的行的索引,但你后续写了faves.drop(faves[faves['fruit'] == X]),这里faves['fruit'] == X是把fruit列的字符串值和索引(通常是数字)做对比,生成的布尔序列完全不符合预期;而且drop方法如果传入DataFrame对象,会默认把它的列名当作要删除的列,这就导致程序尝试删除不存在的列(或逻辑混乱触发KeyError)。
正确写法
方法1:修正你原有的代码
直接用获取到的索引X执行删除操作:
X = faves[(faves['fruit'] != "apple") & (faves['fruit'] != "orange")].index faves = faves.drop(X)
方法2:更简洁的筛选(推荐)
直接筛选出需要保留的行,代码直观易懂:
# 保留fruit列值为apple或orange的行 faves = faves[faves['fruit'].isin(['apple', 'orange'])]
方法3:用query语法(更简洁)
faves = faves.query("fruit in ['apple', 'orange']")
额外排查
如果还是出现KeyError: 'fruit',先确认你的DataFrame确实包含这个列,执行print(faves.columns)查看列名,检查是否有拼写错误(比如大小写、多打/少打字符)。
内容的提问来源于stack exchange,提问作者Crimzon Fiasco
相关产品推荐
相关产品推荐

