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

Pandas DataFrame按列表值模糊匹配行的高效优化方案

高效实现Pandas大规模数据模糊匹配筛选

核心优化思路

你当前的循环+concat方案在数据量和匹配列表规模上升时性能拉胯,本质是重复执行布尔索引和内存拼接操作。最优解法是将多个匹配关键词合并为单个正则表达式,仅执行一次模糊匹配,把时间复杂度从O(n*m)压到O(n)(n为DataFrame行数,m为匹配列表长度)。

优化代码实现

基础版:正则合并一次性匹配

import pandas as pd

infile = "input.csv"
df = pd.read_csv(infile)
names_like = ['Ram', 'Nar']

# 把匹配列表拼接成正则"或"模式
match_pattern = '|'.join(names_like)
# 单次筛选所有符合条件的行
df_res = df[df['NAME'].str.contains(match_pattern, na=False)]

# 可选:若存在同一行匹配多个关键词的情况,去重保留唯一行
df_res = df_res.drop_duplicates()

print(f"df_res=\n{df_res}")

进阶版:预编译正则提升性能

如果匹配列表达到数千级,预编译正则能进一步加快匹配速度:

import re
import pandas as pd

infile = "input.csv"
df = pd.read_csv(infile)
names_like = ['Ram', 'Nar']

# 预编译正则表达式
match_pattern = re.compile('|'.join(names_like))
df_res = df[df['NAME'].str.contains(match_pattern, na=False)]

print(f"df_res=\n{df_res}")

效果说明

  • 两种方案都只对NAME列做一次遍历,避免了循环中重复的DataFrame切片和拼接操作,百万级数据+千级匹配列表的场景下,性能会有数量级的提升。
  • 输出结果与你原代码完全一致,且自动避免了重复行(原代码中若某行匹配多个关键词会被多次concat,这里仅保留一次,若需要保留重复可去掉drop_duplicates)。

示例输出

df_res=
         NAME  AGE
1   Rameshwar   60
3       Naren   60
5      Ramesh   55
6    Narendra   85
8         Ram   85
10     Naresh   86
12   Ramendra   80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:40:31