pandas调用drop()删除DataFrame行触发KeyError自索引报错怎么办
报错产生原因
- 核心问题是
drop()方法的传参写错了:你写的df.drop(df[student_num])里,df[student_num]的作用是取DataFrame中列名等于student_num(当前值为15)的整列数据,根本不是传入要删除的行标识,pandas找不到名为15的列,就会抛出KeyError: 15。 - 额外的潜在风险:从CSV读取的DataFrame如果之前做过行筛选、删除操作,默认生成的整数索引可能存在断档,你以为的行号不一定等于DataFrame实际存储的索引标签,直接传值删行容易删错或者报找不到索引。
正确行删除实现方式
根据student_num的实际含义选对应写法即可:
- 如果
student_num是df.index中实际存在的索引标签值,直接给drop传要删除的标签,指定按行删除即可:
df = df.drop(labels=student_num, axis=0)
- 如果
student_num是你看到的行位置序号(比如打印df时从上往下数的行号,从0开始计数),或者不确定索引是否连续,通过索引下标定位要删除的行更稳妥:
df = df.drop(df.index[student_num], axis=0)
优化提示:如果你的需求是替换指定行的全量值,不需要走「生成新行-删旧行-追加新行」的流程,直接按索引定位赋值即可,比如
df.loc[目标索引] = 存储正确值的列表/Series,能减少索引操作带来的异常。
内容的提问来源于stack exchange,提问作者achsu
相关产品推荐
相关产品推荐

