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

如何在Pandas中用非apply方法筛选被指定字符串包含的列行

当然可以实现这个需求,而且完全能避开apply,用更高效的方式来处理!下面给你两种实用的方案:

方法1:列表推导式生成掩码(简单高效)

虽然不是Pandas原生的向量化API,但Python的列表推导式执行效率通常比apply高不少,代码也足够简洁:

import pandas as pd

mystring = "abc"
df = pd.DataFrame({"A": ["ab", "az"]})

# 生成布尔掩码,判断每个元素是否被mystring包含
mask = [x in mystring for x in df["A"]]
# 筛选符合条件的行
result = df[mask]
print(result)

输出结果:

A
0  ab

方法2:构造正则表达式,用str.contains实现原生向量化

如果想要完全依托Pandas的向量化能力,可以先生成目标字符串的所有连续子串,再用str.contains匹配这些子串,完美实现“列中字符串被指定字符串包含”的逻辑:

import pandas as pd
import re

def get_all_substrings(s):
    # 生成字符串s的所有连续子串
    return [s[i:j+1] for i in range(len(s)) for j in range(i, len(s))]

mystring = "abc"
df = pd.DataFrame({"A": ["ab", "az"]})

# 生成带转义的正则匹配式(避免特殊字符干扰)
substring_pattern = '|'.join(re.escape(sub) for sub in get_all_substrings(mystring))
# 用向量化的str.contains筛选行
result = df[df["A"].str.contains(substring_pattern)]
print(result)

这个方案的优势在于完全利用Pandas的原生向量化优化,数据量越大,性能优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:44:50