pandas按过滤条件删除DataFrame行时报KeyError,求正确操作方法
pandas按过滤条件删除DataFrame指定行的解决方案
错误原因
触发报错的核心原因有两个:
- 语法错误:过滤条件左侧缺失方括号,括号不匹配
- 逻辑错误:
df.drop()方法默认接收的是待删除的行索引标签/列名,不能直接传入布尔掩码,pandas会将布尔值当成索引去匹配,找不到对应索引就会抛出KeyError
正确写法
方案1:反向筛选(最常用,性能更优)
直接通过布尔索引保留不需要删除的行,不需要调用drop方法,支持赋值给新变量或覆盖原变量:
# 写法1:用取反运算符排除符合删除条件的行 df = df[~(df['Year_Map'] == 2021)] # 写法2:直接写不等于判断,逻辑更直观 df = df[df['Year_Map'] != 2021]
如果需要保留原数据不被覆盖,只要把结果赋值给新变量即可:
new_df = df[df['Year_Map'] != 2021]
方案2:使用drop方法实现
如果一定要用drop方法,需要先提取符合删除条件的行的索引,再传给drop:
# 原地修改原DataFrame df.drop(df[df['Year_Map'] == 2021].index, axis=0, inplace=True)
多条件删除注意事项
如果是多个过滤条件组合删除,每个条件需要用小括号包裹,用&(且)、|(或)连接,示例:
# 删除Year_Map为2021 且 销售额大于1000的行 df = df[~((df['Year_Map'] == 2021) & (df['sales'] > 1000))]
内容的提问来源于stack exchange,提问作者ssou
相关产品推荐
相关产品推荐

