Python中通过匹配id列指定关键词为新增列赋值的实现方法
实现方案
首先你需要先补全你定义的映射字典,加入dis-dd对应的映射值:
keyword_map = { 'see-dd': 14, 'sal-led': 8, 'dis-dd': 5 }
方案1:使用pandas处理(推荐用于表格类数据集)
适合数据量较大、后续需要做更多数据处理的场景
写法1:apply自定义函数(可读性高)
import pandas as pd # 构造样例数据,实际使用时替换为pd.read_csv(你的文件路径)读取即可 df = pd.DataFrame({ 'id': ['see-dd-2333', 'see-dd-aaaaa', 'sal-led-sss', 'sal-led-sss', 'dis-dd-red'], 'status': ['y', 'y', 'y', 'n', 'n'] }) def match_pw(id_str): for kw, val in keyword_map.items(): if kw in id_str: return val # 无匹配时的默认返回值可根据需求修改,比如返回0或None return None df['pw'] = df['id'].apply(match_pw)
写法2:正则提取映射(性能更高,适合十万行以上大数据集)
import pandas as pd # 拼接关键词为正则匹配模式 pattern = '|'.join(keyword_map.keys()) # 提取id中包含的目标关键词 df['matched_kw'] = df['id'].str.extract(f'({pattern})', expand=False) # 映射得到pw值 df['pw'] = df['matched_kw'].map(keyword_map) # 删除临时生成的关键词列 df = df.drop('matched_kw', axis=1)
处理完成后可以直接用print(df)查看结果,或用df.to_csv('output.csv', index=False)保存为文件,输出结果完全符合你的预期。
方案2:纯Python实现(无第三方依赖,适合小文件处理)
# 读取输入文件,替换为你自己的文件路径即可 with open('input.txt', 'r', encoding='utf-8') as f: lines = [i.strip() for i in f if i.strip()] # 处理表头 output = ['\t'.join(lines[0].split() + ['pw'])] # 逐行匹配 for line in lines[1:]: id_val, status = line.split() pw = None for kw, val in keyword_map.items(): if kw in id_val: pw = val break output.append(f"{id_val}\t{status}\t{pw}") # 写入结果文件 with open('output.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(output))
注意事项
- Python 3.7及以上版本字典默认保留插入顺序,如果一个id可能匹配多个关键词,把优先级高的关键词放在字典前面即可
- 如果关键词包含正则特殊字符(如
.、*、+等),使用正则提取方案前需要先用re.escape()对每个关键词做转义 - 无匹配场景的返回值可以根据业务需求自行调整
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

