pandas DataFrame批量删除多组指定行区间仅第一组生效问题咨询
问题根因
你定义的spurs区间是基于原始未修改的DataFrame行位置下标,第一次执行删除操作后,full_path的总行数减少了62-16=46行,第一次删除位置之后的所有行整体向前偏移了46个位置。此时你再用原始的(72,83)下标去切已经变短的新DataFrame的索引,要么区间超出当前表的最大行号、要么切到完全不相关的行,自然无法删除目标区间。单独删除第二个区间可以生效,是因为此时表还是原始长度,下标和目标行对应关系正确。
解决方法
有两种常用的无坑实现方式:
- 方案1:倒序遍历删除区间
优先删除位置靠后的区间,不会影响靠前区间的下标对应关系,代码实现如下:
spurs = [(16, 62), (72, 83)] # 按区间起始位置倒序排序,先删靠后的行 for start, end in sorted(spurs, key=lambda x: x[0], reverse=True): full_path.drop(full_path.index[start:end], inplace=True)
- 方案2:一次性收集所有待删除索引后批量删除
全程基于原始表的行位置收集待删除的索引值,完全不会出现下标偏移问题,效率也更高,代码实现如下:
spurs = [(16, 62), (72, 83)] to_drop = [] for start, end in spurs: to_drop.extend(full_path.index[start:end]) full_path.drop(to_drop, inplace=True)
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

