我有一个字典:
dealer = {
'ESSELUNGA': 'Spesa',
'DECATHLON 00000120': 'Sport',
'LEROY MERLIN': 'Casa',
'CONAD 8429': 'Spesa',
'IKEA': 'Casa',
'F.LLI MADAFFARI': 'Spesa',
'SUPERMERCATO IL GIGANT': 'Spesa',
'NATURASI SPA': 'Spesa',
'ESSELUNGA SETTIMO MILANE': 'Spesa'
}
我想将它映射到 pandas df:
entries.Categoria = entries.Commerciante.map(dealer)
有没有办法使用正则表达式来匹配“Commerciante”列上的 map ?通过这种方式,我可以将经销商重写为:
dealer = {
'ESSELUNGA': 'Spesa',
'DECATHLON': 'Sport',
'LEROY MERLIN': 'Casa',
'CONAD': 'Spesa',
'IKEA': 'Casa',
'F.LLI MADAFFARI': 'Spesa',
'SUPERMERCATO IL GIGANT': 'Spesa',
'NATURASI SPA': 'Spesa',
'ESSELUNGA SETTIMO MILANE': 'Spesa'
}
并匹配“迪卡侬”和“迪卡侬 00000120”
最佳答案
谢谢大家。我用你的建议来解决我的问题。我定义了一个新函数:
def dealer_replace(dealer_dict, text):
regex = re.compile("(%s)" % "|".join(map(re.escape, dealer_dict.keys())))
if regex.search(text):
ret = regex.search(text)
return dealer_dict[ret.group()]
else:
return None
并将其与 apply 一起使用
entries['Categoria'] = entries['Commerciante'].apply(lambda v: dealer_replace(dealer, str(v)))
关于python pandas 使用带正则表达式的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30183326/