Python如何匹配列内文本模式并在新增列映射对应数值
实现方案
你用字典存储匹配规则的思路完全可行,下面提供两种常用场景的实现方式:
方案1:Pandas实现(推荐处理结构化表格数据)
适合中大型数据集,处理效率高,代码简洁:
- 先补全你的匹配规则字典
match_map = { 'see-dd': 14, 'sal-led': 8, 'dis-dd': 5 }
- 完整处理代码
import pandas as pd # 读取数据集,此处用你提供的样例直接构造,实际可以换成pd.read_csv/读取excel的逻辑 df = pd.DataFrame({ 'id': ['see-dd-23aaaa33_00', 'see-dd-aaaaa_o00', 'sal-led-sss_0', 'sal-led-sss.AA', 'dis-dd-red_0'], 'status': ['y','y','y','n','n'] }) # 初始化pw列,默认值可根据需求调整为0/其他默认值 df['pw'] = pd.NA # 遍历匹配规则赋值 for keyword, pw_val in match_map.items(): df.loc[df['id'].str.contains(keyword, na=False), 'pw'] = pw_val # 可选:和示例输出一致,清理id列的后缀(下划线、点之后的内容) df['id'] = df['id'].str.split(r'[._]').str[0] # 输出结果即可 print(df)
方案2:纯Python实现(无第三方依赖)
适合小数据集,不需要安装额外库:
# 原始数据示例 raw_data = [ ['see-dd-23aaaa33_00', 'y'], ['see-dd-aaaaa_o00', 'y'], ['sal-led-sss_0', 'y'], ['sal-led-sss.AA', 'n'], ['dis-dd-red_0', 'n'] ] match_map = {'see-dd':14, 'sal-led':8, 'dis-dd':5} result = [] for id_val, status in raw_data: # 匹配pw值 pw = None for kw, val in match_map.items(): if kw in id_val: pw = val break # 清理id后缀 clean_id = id_val.split('.')[0].split('_')[0] result.append([clean_id, status, pw]) # 打印结果 for row in result: print(row)
注意事项
- 如果存在单个id同时匹配多个关键词的情况,调整匹配字典的顺序即可,排在前面的规则会优先生效
- 如果id存在大小写不一致的情况,Pandas实现可以在
str.contains中加case=False参数,纯Python实现可以把id和关键词都转成小写再判断
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

