You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:36:24