如何使用Python pandas将数据划分至对应类别与子类别
Pandas实现数据分类匹配操作方案
核心逻辑分两种场景:有明确关联键的直接映射,无明确关联键的基于关键词规则匹配,可直接输出带类别、子类别的结果表。
场景1:原始数据带可关联的分类标识
如果原始数据中已经存在和分类表对应的字段(比如分类ID、编码),不需要做文本识别,直接用表关联或者字典映射即可,效率最高:
import pandas as pd # 读取原始数据 raw_df = pd.read_excel("你的原始数据文件.xlsx") # 读取分类映射表,至少包含「关联ID、类别、子类别」三个字段 category_df = pd.read_excel("分类映射表.xlsx") # 方法1:merge表关联,适合映射字段多的场景 result_df = raw_df.merge( category_df[["关联ID", "类别", "子类别"]], on="关联ID", # 两张表共有的关联字段名 how="left" # 保留原始数据所有行,匹配不到的类别字段为空 ) # 方法2:map字典映射,适合简单映射场景 category_dict = {row["关联ID"]:(row["类别"], row["子类别"]) for _, row in category_df.iterrows()} raw_df[["类别", "子类别"]] = raw_df["关联ID"].apply(lambda x: pd.Series(category_dict.get(x, ("未分类", "未分类")))) # 导出结果 result_df.to_excel("分类结果.xlsx", index=False)
场景2:无明确关联键,需要从文本字段匹配分类
也就是示例对应的场景:原始数据只有交易/商品文本描述,需要根据文本内容匹配到对应类别、子类别,用关键词规则匹配即可实现和预期完全一致的效果:
- 先整理分类规则:把每个子类别对应的特征关键词整理成规则表,维护成本低、准确率可控
- 按关键词长度倒序匹配,优先匹配更精准的长词,避免短词误匹配
- 批量给原始数据打标,匹配不到的统一标记为「未分类」,后续迭代规则即可
完整可运行代码:
import pandas as pd # 读取待分类原始数据,替换成你的文件路径 raw_df = pd.read_excel("原始数据.xlsx") # 分类规则,可单独存成excel维护,按需补全所有条目 category_rules = [ {"keyword": "星巴克", "sub_category": "咖啡饮品", "category": "餐饮美食"}, {"keyword": "瑞幸", "sub_category": "咖啡饮品", "category": "餐饮美食"}, {"keyword": "肯德基", "sub_category": "快餐简餐", "category": "餐饮美食"}, {"keyword": "滴滴出行", "sub_category": "网约车", "category": "交通出行"}, {"keyword": "地铁", "sub_category": "公共交通", "category": "交通出行"}, {"keyword": "淘宝", "sub_category": "线上零售", "category": "购物消费"}, {"keyword": "京东", "sub_category": "线上零售", "category": "购物消费"}, ] # 定义文本匹配函数 def tag_category(match_text): match_text = str(match_text).strip() # 长关键词优先匹配 for rule in sorted(category_rules, key=lambda i: len(i["keyword"]), reverse=True): if rule["keyword"] in match_text: return pd.Series([rule["category"], rule["sub_category"]]) # 无匹配规则默认标记 return pd.Series(["未分类", "未分类"]) # 批量打标,注意把「交易描述」替换成你表里用于匹配的文本列名 raw_df[["类别", "子类别"]] = raw_df["交易描述"].apply(tag_category) # 导出最终结果 raw_df.to_excel("带分类的结果表.xlsx", index=False)
优化提示
- 规则量超过1000条时,可替换为AC自动机做关键词匹配,运行速度可提升10倍以上
- 可定期把匹配结果里的「未分类」条目导出,补充关键词规则,迭代几次后准确率可达99%以上
- 存在同义词、别名的情况(比如「星爸爸」指代星巴克),直接在规则里加对应关键词即可,不需要改代码
内容的提问来源于stack exchange,提问作者Mathews Ignatious
相关产品推荐
相关产品推荐

