如何用DataFrame语法筛选列值存在于指定字符串中的行
问题:将循环匹配逻辑转为Pandas DataFrame筛选语法
示例代码
data='findme, ok' df = pd.DataFrame([x.split(',') for x in data.split('\n')]) df.columns = ['keyword', 'result'] keywords = df['keyword'].tolist() test1='maybe you canfindme'.lower()
需求说明
需要把下面这段遍历匹配的循环代码,改成Pandas DataFrame原生的筛选语法:
for keyword in df['keyword'].tolist(): if keyword in test1: print(keyword)
你尝试的写法df[df['keyword'] in test1]是错误的,因为in运算符在这里会判断整个Series对象是否是test1的成员,而不是逐个检查每个keyword是否在test1中。
正确实现方法
方法1:使用apply()逐个判断
这是最直观的写法,通过apply()对每个keyword执行"是否在test1中"的判断:
filter_result = df[df['keyword'].apply(lambda x: x in test1)]
运行后filter_result就是包含所有符合条件的行的DataFrame,对应示例里就是keyword为findme的那一行。
方法2:使用str.contains()(需注意正则特殊字符)
如果你的keyword中没有正则特殊字符(比如*、|等),也可以用Pandas的字符串方法str.contains(),把所有keyword拼接成正则匹配模式:
# 把所有keyword用|拼接,形成正则匹配规则 pattern = '|'.join(df['keyword']) filter_result = df[df['keyword'].str.contains(pattern, na=False)]
这种方法性能比apply()略好,但如果keyword包含正则特殊字符,需要先转义,否则会匹配出错。
内容的提问来源于stack exchange,提问作者Bryan Fok
相关产品推荐
相关产品推荐

