基于索引值和位置删除Pandas DataFrame行失败求助
解决Pandas删除指定索引倒数第3行的KeyError问题
问题场景
需要删除DataFrame中索引值为'TMC'且从底部数第3行的记录,当前DataFrame结构如下:
TICKER ORDER ID BUY DATE TMC 1 1 TMC 1 1 TMC 1 1 TMC 2 1 RVPH 1 1 TSLA 150 09/18/2022, 18:10:13 TMC 1 1 TMC 1 1
尝试执行以下代码时触发错误:
ExcelPD = ExcelPD.drop(ExcelPD.loc['TMC'].iloc[-3])
错误信息(翻译后):
在
_drop_axis函数第4340行触发错误:KeyError: [对应行数据] 在轴中未找到
错误原因
ExcelPD.loc['TMC'].iloc[-3]返回的是整行的数据内容,而DataFrame.drop()方法默认接收的是行的索引标签(行的唯一标识),不是行数据本身,因此会因找不到匹配的标签而抛出KeyError。
正确解决方案
方案1:先获取目标行的索引标签再删除
# 提取所有索引为'TMC'的行的索引列表,取倒数第3个索引 target_idx = ExcelPD.loc['TMC'].index[-3] # 根据索引标签删除行 ExcelPD = ExcelPD.drop(target_idx)
方案2:布尔索引+索引提取的简洁写法
# 直接筛选出索引为'TMC'的行的索引,取倒数第3个后删除 ExcelPD = ExcelPD.drop(ExcelPD[ExcelPD.index == 'TMC'].index[-3])
验证效果
执行后,原DataFrame中索引为'TMC'的倒数第3行(即ORDER ID为2的那条TMC记录)会被成功删除,后续可正常进行数据追加与格式调整。
内容的提问来源于stack exchange,提问作者VV33
相关产品推荐
相关产品推荐

