熊猫正则表达式比赛

时间:2020-06-25 14:38:13

标签: python regex pandas

要在数据框列上执行正则表达式匹配,以修改列的内容。 例如,给定此数据框:

将熊猫作为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中逐行重写所有正则表达式。有没有办法直接在Pandas中执行正则表达式?

1 个答案:

答案 0 :(得分:1)

您在寻找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)

您将获得相同的输出(具有不同的数据框)