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

如何利用映射字典批量实现Pandas字符串列的手动词形归一化?

Pandas批量实现交易字符串的词形归一化

解决方案思路

要高效完成批量替换,核心是把原映射字典转换成「变体词→主词」的反向映射,再利用正则表达式一次性匹配所有变体并替换,避免多次调用str.replace带来的性能损耗。

具体实现代码

import pandas as pd
import re

# 原始数据
list1 = ['0412 UBER TRIP HELP.UBER.COMCA',
'0410 UBER TRIP HELP.UBER.COMCA',
'MOBILE PURCHASE 0410 VALENCIA WHOLE FOODS SAN FRANCISCOCA',
'WHOLEFDS WBG#1 04/13 PURCHASE WHOLEFDS WBG#104 BROOKLYN NY',
'0414 LYFT *CITI BIKE BIK LYFT.COM CA',
'0421 WALGREENS.COM 877-250-5823 IL',
'0421 Rapha Racing PMT LLC XXX-XX72742 OR',
'0422 UBER EATS PAYMENT HELP.UBER.COMCA',
'0912 WHOLEFDS NOE 10379 SAN FRANCISCOCA',
'PURCHASE 1003 CAVIAR*JUNOON WWW.DOORDASH.CA']
df = pd.DataFrame(list1, columns=['feature'])

# 原始映射字典
map1 = {'payment':['pmts','pmnt','pmt','pmts','pyment','pymnts'],
'account':['acct'],
 'pharmacy':['walgreens','walgreen','riteaid','cvs','pharm'],
 'food_delivery':['uber eats','doordash','seamless','grubhub','caviar'],
 'ride_share':['uber','lyft'],
 'whole_foods':['wholefds','whole foods','whole food']
}

# 步骤1:反转映射字典,生成「变体词→主词」的对应关系
reverse_map = {}
for main_term, variants in map1.items():
    for variant in variants:
        # 统一转小写,避免大小写匹配问题
        reverse_map[variant.lower()] = main_term

# 步骤2:构建正则表达式模式,匹配所有变体词(忽略大小写,匹配完整单词)
# re.escape处理变体中的特殊字符,\b确保只匹配完整单词
pattern = re.compile(
    r'\b(' + '|'.join(re.escape(v) for v in reverse_map.keys()) + r')\b',
    flags=re.IGNORECASE
)

# 步骤3:定义替换函数,根据匹配结果返回对应主词
def replace_match(match):
    return reverse_map[match.group().lower()]

# 步骤4:批量替换生成归一化后的列
df['normalized_feature'] = df['feature'].str.replace(pattern, replace_match)

# 查看结果
print(df[['feature', 'normalized_feature']])

关键细节说明

  • 大小写兼容:通过re.IGNORECASE和统一转小写的处理,不管原字符串是大写、小写还是混合,都能正确匹配变体词。
  • 完整单词匹配:使用\b单词边界,避免出现部分匹配(比如不会把包含"pmt"的其他无关单词误替换)。
  • 性能优化:仅需对字符串列遍历一次,相比多次调用str.replace,数据量越大,效率提升越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:34