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

如何删除DataFrame中service列为指定值的多行,替代低效for循环方案

Pandas删除指定条件行的高效实现

你现有代码存在两个明显问题:一是遍历循环完全冗余,二是drop方法未设置inplace=True参数,执行后并不会修改原DataFrame,重复无意义的过滤逻辑还会严重拖慢运行效率。

pandas的布尔索引是向量化运算,不需要遍历行即可完成筛选,性能比循环写法高几个数量级,有两种常用的正确实现方式:

  1. 反向筛选保留行(性能最优)
    直接筛选出service列不在待删除列表内的行,覆盖原变量即可:
target_services = {'harvest', 'http_2873', 'red_i'}
df1 = df1[~df1['service'].isin(target_services)]
  1. 按索引删除
    如果偏好使用drop方法,可以先过滤出待删除行的索引再批量删除:
target_services = {'harvest', 'http_2873', 'red_i'}
drop_index = df1[df1['service'].isin(target_services)].index
df1.drop(drop_index, inplace=True)

补充说明:

  • 使用isin方法可以一次性匹配多个目标值,比拼接多个==和|逻辑运算符的写法更简洁易维护
  • 两种写法均为全量向量化运算,百万行级别的DataFrame也可以在毫秒级完成操作,性能远高于循环遍历实现
  • 如果需要新增其他过滤条件,仅需调整布尔判断逻辑即可,无需修改整体结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:27:03