希望对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中逐行重写所有的正则表达式案例。 有没有一种方法可以直接在熊猫中执行正则表达式?
您正在查找地图
:
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)
得到相同的输出(具有不同的数据帧)