如何在Python中基于部分字符串匹配创建标签?
解决方案
你的代码失效的核心原因是:Python中==是精确字符串匹配,SQL风格的%通配符在这里不生效——你不能直接用x == 'OC%'判断字符串是否以OC开头,这只会匹配和OC%完全一致的字符串。
下面是几种可行的修正方案:
方法1:使用str.startswith()直接匹配前缀
这是最直观的修正方式,利用Python字符串内置的startswith()方法检查前缀:
import pandas as pd # 示例数据 data = {'Index': ['NDP2207342', 'OC22178098', 'SD88730948', 'OC39002847', 'PTP9983930', 'NDP9110876']} df = pd.DataFrame(data) def labelApply(x): if x.startswith('OC'): return 'OCAR' elif x.startswith('NDP'): return 'NCAR' elif x.startswith('PTP'): return 'SWAR' elif x.startswith('SD'): return 'SDAR' else: return 'Out of Area' df['labels'] = df['Index'].apply(labelApply)
方法2:字典映射维护规则(更易扩展)
如果后续需要新增更多前缀和标签,用字典存储映射关系,循环匹配的方式更便于维护:
prefix_label_map = { 'OC': 'OCAR', 'NDP': 'NCAR', 'PTP': 'SWAR', 'SD': 'SDAR' } def labelApply(x): for prefix, label in prefix_label_map.items(): if x.startswith(prefix): return label return 'Out of Area' df['labels'] = df['Index'].apply(labelApply)
方法3:矢量化操作(适合大数据量)
用pandas的矢量化方法结合numpy.select,避免循环,处理大数据集时效率更高:
import numpy as np # 定义匹配条件和对应标签 conditions = [ df['Index'].str.startswith('OC'), df['Index'].str.startswith('NDP'), df['Index'].str.startswith('PTP'), df['Index'].str.startswith('SD') ] labels = ['OCAR', 'NCAR', 'SWAR', 'SDAR'] df['labels'] = np.select(conditions, labels, default='Out of Area')
注意事项
如果存在前缀包含关系(比如同时有O和OC作为前缀),需要把更长的前缀放在匹配顺序的前面,避免短前缀先匹配导致错误。
内容的提问来源于stack exchange,提问作者JLuu
相关产品推荐
相关产品推荐

