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

如何在Pandas中高效删除PHRASE列含'___'的行?

高效删除DataFrame中含特定模式的行

原代码的问题

  1. 循环遍历效率极低:Pandas的核心优势是矢量化运算,逐行循环处理200万条数据会导致耗时剧增,完全违背了Pandas的设计初衷。
  2. append操作错误且低效:df.append()不会修改原DataFrame,你没有将返回值重新赋值给df_clean,等于白操作;而且每次append都会创建新的DataFrame对象,频繁累加会带来巨大的内存和性能开销。
  3. 计数逻辑冗余:手动遍历计数完全没必要,用DataFrame的长度差就能直接算出结果。

高效解决方案(两种可选)

方法1:固定字符串匹配(推荐,最快)

因为你要匹配的是固定的"___",直接用str.contains做矢量化筛选,性能最优:

# 筛选出PHRASE列不含"___"的所有行
df_clean = df_original[~df_original["PHRASE"].str.contains("___", na=False)]

# 统计被删除的行数(含"___"的记录数)
deleted_count = len(df_original) - len(df_clean)
# 统计保留的行数
kept_count = len(df_clean)
  • ~符号表示取反,筛选出不满足"包含___"条件的行
  • na=False用来处理PHRASE列可能存在的空值(NaN),避免这些行被错误过滤或报错
  • 矢量化操作直接在整列上批量处理,百万级数据几秒就能完成

方法2:正则匹配(适配复杂模式)

如果以后需要匹配更复杂的正则规则(比如不确定下划线数量的情况),可以结合正则表达式:

import re
# 编译正则模式(提前编译能提升重复匹配的效率)
pattern = re.compile(r"___")
# 筛选不含该模式的行
df_clean = df_original[~df_original["PHRASE"].str.match(pattern, na=False)]

# 计数逻辑和方法1一致
deleted_count = len(df_original) - len(df_clean)
kept_count = len(df_clean)

内容的提问来源于stack exchange,提问作者Navid Aslankhani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:35:23