Pandas定位特定行索引并删除的步骤及索引不一致问题解决
解决DataFrame删除行后索引不匹配的问题
我懂你遇到的这个麻烦——删掉含NaN的行之后,DataFrame的索引还保留着原来的标签,导致你找到的目标行标签(比如示例里的28)和实际行的位置对不上,直接用标签操作还会报错。下面给你两种简洁的解决办法:
方法一:重置索引后按位置删除
先把索引重置成连续的0起始序列,这样操作就和你直觉里的行位置完全一致了:
- 重置索引(加
drop=True可以直接丢弃原来的旧索引列,让数据更整洁):app = app.reset_index(drop=True) - 定位目标行的新索引:
target_idx = app[app['prix'] == 'Everyone'].index[0] - 删除该行:
app = app.drop(target_idx)
方法二:直接按条件删除(更高效)
其实不用特意找索引,直接根据prix列的条件过滤掉目标行,一步就能完成:
# 方式A:用布尔索引直接过滤 app = app[app['prix'] != 'Everyone'] # 方式B:结合drop和条件索引 app = app.drop(app[app['prix'] == 'Everyone'].index)
为什么你之前的操作会报错?
删掉NaN行之后,DataFrame的索引标签还是原来的(比如示例里的28),但DataFrame的实际行数已经变成5了。你用app.index[28]时,是在按位置访问索引列表,而索引列表只有5个元素,自然会报IndexError。这时候的索引是「非连续的标签」,不是连续的位置序号,得区分开**标签索引(loc)和位置索引(iloc)**的差异。
内容的提问来源于stack exchange,提问作者RandomSpiRiT




