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

大熊猫中的regexp匹配

  •  0
  • shamalaia  · 技术社区  · 5 年前

    为了修改数据帧列的内容,我们希望对数据帧列执行regexp匹配。 例如,给定此数据帧:

    作为pd导入

    df = pd.DataFrame([['abra'], ['charmender'], ['goku']],
         columns=['Name'])
    print(df.head())
    

    我要执行以下正则表达式匹配:

    CASE 
       WHEN REGEXP_MATCH(Landing Page,'abra') THEN "kadabra" 
    
       WHEN REGEXP_MATCH(Landing Page,'charmender') THEN "charmaleon" 
    
    ELSE "Unknown" END
    

    我的解决方案如下:

    df.loc[df['Name'].str.contains("abra", na=False), 'Name'] = "kadabra"
    df.loc[df['Name'].str.contains("charmender", na=False), 'Name'] = "charmeleon"
    df.head()
    

    这很管用,但我不知道是否有更好的方法。

    此外,我必须用Python逐行重写所有regex案例。有没有办法直接在熊猫身上执行regex?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Quang Hoang    5 年前

    你在找什么 map :

    df['Name'] = df['Name'].map({'abra':'kadabra','charmender':'charmeleon'})
    

    输出:

             Name
    0     kadabra
    1  charmeleon
    2         NaN
    

    更新 :对于部分匹配:

    df = pd.DataFrame([['this abra'], ['charmender'], ['goku']],
         columns=['Name'])
    
    
    replaces = {'abra':'kadabra','charmender':'charmeleon'}
    df['Name'] = df['Name'].str.extract(fr"\b({'|'.join(replaces.keys())})\b")[0].map(replaces)
    

    得到相同的输出(使用不同的数据帧)