如何用DataFrame.drop()移除DataFrame中activity列的77、99标签?
解决KeyError:移除DataFrame中activity列值为77、99的行
你触发KeyError的原因很明确:df.drop(axis=0, index=["77","99"])是按行索引(index)删除行,但你实际要删除的是activity列中值为77、99的行,不是行索引等于77、99的行,自然找不到对应索引报错。
下面是几种正确的解决方案:
方法1:布尔索引筛选(最常用)
直接筛选出activity列值不在[77,99]范围内的行:
df2 = df[~df['activity'].isin([77, 99])]
- 说明:
isin([77,99])会标记出activity列值为77或99的行,~符号表示取反,最终保留符合要求的行。注意这里用数字77、99,不是字符串,因为你的activity列存储的是数值类型。
方法2:先获取待删行索引再删除
如果需要明确知道要删除的行索引,可以先提取索引再执行删除:
# 获取activity列值为77或99的行索引 drop_indices = df[df['activity'].isin([77, 99])].index # 根据索引删除行 df2 = df.drop(drop_indices)
方法3:用query语法简化筛选
如果你喜欢更简洁的写法,可以用query方法:
df2 = df.query('activity not in [77, 99]')
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

