Pandas如何匹配列表任意完整关键词为字符串列赋值布尔值
Pandas 多分隔符独立词汇匹配实现方案
核心逻辑
原isin方法仅支持单元格整值完全匹配,无法覆盖多词分隔场景。要实现独立词汇完整匹配,按以下逻辑处理即可:
- 待匹配关键词转为集合结构,提升成员判断效率
- 对
properties列的字符串,以逗号、任意空白字符为分隔符拆分,过滤空值得到独立词汇列表 - 拆分后的词汇与关键词集合存在交集则标记为
True,否则为False
完整代码
import pandas as pd import re # 初始化数据 data = { "properties": ["FinancialOffice","Gas Station", "Office", "K-12 School", "Commercial, Office"], } df = pd.DataFrame(data) proplist = ["Office","Other - Mall","Gym"] prop_set = set(proplist) df["flag"] = df["properties"].apply( lambda s: bool(prop_set & set(re.split(r"[,\s]+", s.strip()))) )
匹配结果
执行后输出结果完全符合规则要求:
| properties | flag |
|---|---|
| FinancialOffice | False |
| Gas Station | False |
| Office | True |
| K-12 School | False |
| Commercial, Office | True |
匹配规则校验:
- 连写字符串
FinancialOffice无分隔符,拆分后仅为自身,不会误识别子串Office,判定为不匹配 - 逗号+空格分隔的
Commercial, Office拆分后包含独立词汇Office,判定为匹配 - 单值
Office与关键词完全一致,判定为匹配
空值兼容处理
如果properties列存在空值(NaN/None),调整匹配逻辑即可避免报错:
df["flag"] = df["properties"].apply( lambda s: bool(prop_set & set(re.split(r"[,\s]+", str(s).strip()))) if pd.notna(s) else False )
内容的提问来源于stack exchange,提问作者Tahsin Alam
相关产品推荐
相关产品推荐

