要在数据框列上执行正则表达式匹配,以修改列的内容。 例如,给定此数据框:
将熊猫作为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中执行正则表达式?
答案 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)
您将获得相同的输出(具有不同的数据框)