You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用drop方法删除指定值行报KeyError/ValueError如何解决

问题根因

你的代码报错核心是对DataFrame.drop()的作用理解错误,和新旧CSV本身无关,之前代码能运行纯粹是巧合:

  • drop()方法的作用是按行/列的标签名删除,默认参数axis=0代表按行索引标签删行,你直接传入["gifs", "gif"]时,程序会去找行索引值刚好等于gifs、gif的行做删除,新CSV的索引列(你设置的index_col="C")里不存在这两个标签值,就会抛出KeyError: not found in axis。
  • 当你给axis传入非0/index、1/columns的非法值时,自然会触发ValueError: No axis named [] for object type DataFrame,就算你传对axis参数,也实现不了“按单元格内容删行”的需求。
  • 旧代码能跑只是因为旧CSV的C列索引里刚好存在值为gifs、gif的标签,属于误打误撞没抛错,实际逻辑从一开始就不符合需求。
正确实现代码

要删除指定列包含gifs/gif内容的行,用布尔索引做筛选即可,不需要调用drop():

import pandas as pd

data = pd.read_csv("Hete Output.csv", index_col="C")

# 把「待检查列名」替换成你实际要判断内容的列名
# 场景1:单元格内容完全等于gif/gifs时删除
data = data[~data["待检查列名"].isin(["gifs", "gif"])]

# 场景2:单元格内容包含gif/gifs关键词就删除(不需要完全相等),用下面这行替换上面的筛选逻辑
# data = data[~data["待检查列名"].str.contains(r"gif|gifs", na=False)]

# 如果你要检查的是被设为索引的C列,把上面筛选条件里的data["待检查列名"]替换成data.index即可
data.to_csv("Hete Output 1.csv")
注意事项
  • drop()仅适合用来删除已知明确标签名的整行/整列,永远不要用它做单元格内容匹配的行删除操作。
  • axis参数仅用来指定删除维度:axis=0(默认值,等价于axis="index")代表删行,axis=1(等价于axis="columns")代表删列,传入其他值都会触发参数非法报错。
  • 做字符串包含匹配时记得加na=False参数,避免列里存在空值时触发类型报错。

内容的提问来源于stack exchange,提问作者IUseThisToAskForHelp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:30:35