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

如何用Python的Pandas或Openpyxl按供应商名称分类Excel数据库?

Pandas/Openpyxl实现Excel供应商模糊匹配分类

问题场景

需要处理Excel数据:第1列为供应商名称(存在大小写、拼写差异等变体),需在第2列填充对应供应商类型。原代码错误地将所有行的TYPE列设为"SHOPEE",代码如下:

x = [table.loc[:,"supplier"].str.contains("SHOPEE")]
for x in table:
    table["TYPE"] = "SHOPEE"
display(table)

错误原因

for x in table是遍历DataFrame的列名,而非筛选后的行。每次循环都对整个TYPE列赋值,最终所有行都会被覆盖为"SHOPEE"。


解决方案(Pandas优先推荐)

1. 单供应商模糊匹配

通过布尔索引精准定位符合条件的行,仅对匹配行赋值:

# 先初始化TYPE列为空或默认值
table["TYPE"] = ""

# 模糊匹配包含"SHOPEE"的供应商,忽略大小写、跳过空值
mask = table["supplier"].str.contains("SHOPEE", case=False, na=False)
table.loc[mask, "TYPE"] = "SHOPEE"
  • case=False:兼容"SHOPEE"、"shopee"、"Shopee"等大小写变体
  • na=False:避免空值/NaN导致的匹配报错

2. 多供应商批量分类

如果有多个供应商需要映射,用字典+循环批量处理更高效:

# 定义关键词-类型映射表,支持模糊匹配
supplier_map = {
    "SHOPEE": "电商平台",
    "ALIEXPRESS": "跨境电商",
    "LOCAL FACTORY": "本地工厂"
}

# 初始化TYPE列为默认值"其他"
table["TYPE"] = "其他"

# 遍历映射表,批量匹配赋值
for keyword, type_label in supplier_map.items():
    match_mask = table["supplier"].str.contains(keyword, case=False, na=False)
    table.loc[match_mask, "TYPE"] = type_label

3. 精准匹配(避免误判)

如果需要排除部分关键词的误匹配,可使用正则表达式的边界匹配:

# 匹配独立存在的"SHOPEE"(避免匹配包含该字符串的其他供应商名)
mask = table["supplier"].str.contains(r"\bSHOPEE\b", case=False, na=False)
table.loc[mask, "TYPE"] = "SHOPEE"

Openpyxl实现(适合超大Excel文件)

若Excel文件过大,逐行处理更节省内存:

from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook("your_excel_file.xlsx")
ws = wb.active

# 从第2行开始遍历(假设第1行是表头)
for row in ws.iter_rows(min_row=2, values_only=False):
    supplier_val = row[0].value
    if supplier_val:
        # 统一转大写后匹配,兼容变体
        if "SHOPEE" in str(supplier_val).upper():
            row[1].value = "SHOPEE"
        # 可添加其他供应商的匹配逻辑

# 保存处理后的文件
wb.save("classified_suppliers.xlsx")

内容的提问来源于stack exchange,提问作者user21921326

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:33