Pandas DataFrame正则匹配如何用AND逻辑同时匹配所有指定关键词?
简洁实现方案
方案1:关键词列表遍历(扩展性最优)
把需要匹配的关键词统一存为列表,结合all()方法判断所有关键词是否都在当前行出现,后续新增关键词只需修改列表即可,无需调整判断逻辑:
import pandas as pd import re df = pd.DataFrame({'a':['base','rhino','gray','horn'], 'b':['rhino','elephant', 'gray','trunk'], 'c':['cheese','lion', 'beige','mane']}) # 定义需全部匹配的关键词列表 keywords = ['rhino', 'elephant', 'lion'] row_index = df.index[df.apply( lambda row: all(row.str.contains(key, case=False, regex=True).any() for key in keywords), axis=1 )].tolist() print(row_index) # 输出结果:[1]
如果需要严格匹配整个单元格的值等于关键词,将str.contains替换为str.match即可。
方案2:单正则正向前瞻实现
如果偏好使用单个正则表达式完成匹配,可以用正向前瞻语法强制要求同时命中所有关键词,适合关键词数量较少的场景:
pattern = r'(?s)(?=.*rhino)(?=.*elephant)(?=.*lion)' row_index = df.index[df.apply( lambda x: x.str.contains(pattern, flags=re.IGNORECASE).any(), axis=1 )].tolist()
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

