提问者:小点点

熊猫中的正则表达式匹配


希望对dataframe列执行正则表达式匹配,以便修改列的内容。 例如,给定此数据帧:

进口熊猫作为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中逐行重写所有的正则表达式案例。 有没有一种方法可以直接在熊猫中执行正则表达式?


共1个答案

匿名用户

您正在查找地图:

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)

得到相同的输出(具有不同的数据帧)