如何高效筛选Pandas DataFrame中值为指定子串的列
高效筛选Pandas DataFrame:子串匹配优化方案
先明确示例的正确数据构造方式:
import pandas as pd df = pd.DataFrame([['a', 'b', 'c'], ['hello', 'bye', 'hello']]) reference_str = "hello there"
你需要筛选第一行中,对应第二行字符串是reference_str子串的元素。相比正则遍历,以下是更高效的实现方式:
方法1:矢量化成员检查(最优)
利用Python原生in关键字做子串判断,结合Pandas布尔索引实现。原生子串检查是C级别的底层实现,开销远低于正则引擎,速度优势明显:
# 生成布尔掩码:检查第二行每个元素是否是参考字符串的子串 mask = df.loc[1].apply(lambda x: x in reference_str) # 用掩码筛选第一行的目标元素 output = df.loc[0, mask].tolist() # 输出结果:['a', 'c']
方法2:列表推导式(适合小数据集)
如果数据集规模较小,用列表推导式代码更简洁,执行效率也不错:
# 按列遍历,判断第二行元素是否在参考字符串中,保留对应第一行元素 output = [df.loc[0, col] for col in df.columns if df.loc[1, col] in reference_str]
为什么比正则高效?
正则表达式需要启动正则引擎完成模式编译与匹配,而原生in操作直接调用高效的字符串匹配算法(如Boyer-Moore),在绝大多数子串匹配场景下,速度是正则的数倍甚至数十倍。
内容的提问来源于stack exchange,提问作者randomwerg
相关产品推荐
相关产品推荐

