Python迭代正则条件匹配替换Pandas DataFrame列值方法咨询
问题1:更简洁优雅的标准化实现方案
完全有更简单的实现,不需要手动循环处理索引,直接用Pandas自带的正则提取能力一步完成,哪怕你有上百个关键词也能高效处理:
- 核心思路是把所有需要匹配的标准化关键词拼成正则表达式,直接从原列中提取匹配到的内容,自动赋值到标准化列。
代码示例:
import pandas as pd import re # 你的样例数据 data = pd.DataFrame({'tool_description':['bond assy fixture', 'pierce die', 'cad geometrical non-template', '707 bond assy fixture', 'john pierce die', '123 cad geometrical non-template', 'jjashd bond assy fixture', '10481 pierce die', '81235 cad geometrical non-template']}) # 定义所有需要匹配的标准化关键词 standard_keywords = ['bond assy fixture', 'pierce die', 'cad geometrical non-template'] # 生成正则匹配规则,re.escape用于处理关键词中可能存在的正则特殊字符,\b是单词边界匹配 pattern = '|'.join([rf'\b{re.escape(kw)}\b' for kw in standard_keywords]) # 一步提取匹配结果赋值到标准化列,flags=re.IGNORECASE对应不区分大小写 data['standardized_column'] = data['tool_description'].str.extract( f'({pattern})', flags=re.IGNORECASE, expand=False )
- 这种向量化操作的效率远高于循环遍历,尤其适合数据量较大、关键词较多的场景。如果你存在一个关键词对应多个匹配规则的场景,只要把关键词和对应正则的映射关系存成字典,再稍作调整即可,逻辑完全一致。
问题2:正则循环迭代的修正方法
你之前的写法问题出在正则字符串里的i被识别成了普通字符,没有当成循环变量解析,只要用f-string或者字符串拼接把变量嵌入正则即可,同时可以优化掉冗余的索引循环逻辑:
import pandas as pd import re data = pd.DataFrame({'tool_description':['bond assy fixture', 'pierce die', 'cad geometrical non-template', '707 bond assy fixture', 'john pierce die', '123 cad geometrical non-template', 'jjashd bond assy fixture', '10481 pierce die', '81235 cad geometrical non-template']}) data['standardized_column'] = "" # 你的所有标准化关键词 conditions = ['bond assy fixture', 'pierce die', 'cad geometrical non-template'] for kw in conditions: # 用f-string把循环变量嵌入正则,re.escape转义特殊字符 match_mask = data.tool_description.str.contains(rf"\b{re.escape(kw)}\b", case=False, regex=True) # 直接对匹配到的行批量赋值,不需要单独取索引循环 data.loc[match_mask, 'standardized_column'] = kw
- 注意如果同一行内容匹配多个关键词,循环赋值时后出现的关键词会覆盖先赋值的结果,你可以根据实际需求调整
conditions列表的顺序。
内容的提问来源于stack exchange,提问作者alexwr8
相关产品推荐
相关产品推荐

