使用pandas str.contains时,如何避免重复条件并统计修改次数?
批量处理str.contains匹配并统计修改行数
问题场景
大量使用str.contains进行匹配赋值时,需要频繁修改匹配条件,同时希望自动统计每次修改的行数,避免重复复制粘贴代码导致的繁琐和错误。
解决方案
将匹配规则(模式+目标分类)统一管理,通过循环批量处理,自动统计并输出每次修改的行数:
- 定义匹配规则列表:把所有需要匹配的模式和对应的分类放在一个列表中,后续修改条件只需调整这个列表即可。
- 循环处理规则:遍历规则列表,每次执行匹配、统计行数、赋值,并打印结果。
示例代码
import pandas as pd # 替换为你实际需要匹配的列名(比如df["product_name"]) target_column = df["目标列名"] # 初始化category列(如果尚未创建) df["category"] = "" # 定义匹配规则:(匹配模式, 目标分类) match_rules = [ ("apple", "fruit"), ("banana", "fruit"), ("Samsung|Sony", "Technology") ] # 循环处理每个规则 for pattern, category in match_rules: # 生成匹配掩码,na=False避免空值干扰匹配结果 mask = target_column.str.contains(pattern, na=False) # 统计匹配到的行数 change_count = mask.sum() # 执行分类赋值 df.loc[mask, "category"] = category # 输出本次修改结果 print(f"{pattern} 替换完成,共修改 {change_count} 行")
预期输出
apple 替换完成,共修改 30 行 banana 替换完成,共修改 57 行 Samsung|Sony 替换完成,共修改 0 行
优势
- 只需维护
match_rules列表,无需重复编写loc和str.contains代码 - 自动统计修改行数,直观查看每次匹配的效果
- 减少重复粘贴带来的错误,提升效率
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

