代码之家  ›  专栏  ›  技术社区  ›  kartheek

pandas替换值dict中的子字符串

  •  2
  • kartheek  · 技术社区  · 6 年前

    下面是示例数据框

    data = {'A': ['hi UK','hi IN','hi US']}
    
    df = pd.DataFrame(data)
    

    我想更新UK,在下面匹配dict的列值中

    abs = {'U': 'UK -- extra', 'UK': 'test Kingdom', 'IN':'India'}
    

    然后我用了 replace function (pandas.DataFrame.replace)

    df['A'] = df['A'].replace(to_replace = abs, regex=True)
    print(df)
    
                               A
    0  hi test Kingdom -- extraK
    1                   hi India
    2  hi test Kingdom -- extraS
    

    它先把u替换成 UK -- extra 又一次 UK 具有 test kingdom 所以最终结果是 hi test Kingdom -- extraK 我认为它应该给测试王国

    预期输出为

                     A
    0  hi test Kingdom
    1         hi India
    2            hi US
    

    我是否遗漏了任何东西,或是为了达到上述结果。

    事先谢谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    我认为单词boundary有助于匹配 UK , US 而且没有 U :

    data = {'A': ['hi UK','hi IN','hi US']}
    
    d = {'U': 'UK -- extra', 'UK': 'test Kingdom', 'IN':'India'}
    
    d = {r'\b{}\b'.format(k):v for k, v in d.items()}
    df = pd.DataFrame(data)
    
    df['A'] = df['A'].replace(to_replace = d, regex=True)
    print(df)
                     A
    0  hi test Kingdom
    1         hi India
    2            hi US