python pandas 使用带正则表达式的 map

标签 python regex pandas

我有一个字典:

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/

相关文章:

python - 使用 sympy 简化嵌套指数和对数

c++ - string::replace 在有效迭代器上抛出 std::out_of_range

python - 无法在 Pandas 中创建折线图

python-3.x - ModuleNotFoundError : No module named 'pandas.core.indexes'

python - Q : How do I draw the support and resistance lines on a candlestick graph using mplfinance?

python - 与 Python 脚本远程交互的最简单方法

python - 当每个脚本在 python 中都有多个线程时,从主脚本同时运行两个脚本

regex - 可以使用正则表达式来匹配嵌套模式吗?

java - 带符号的拉丁正则表达式

python - 如何在 python pandas 的两个级别上分组计数值?