【发布时间】:2021-12-22 08:24:36
【问题描述】:
您好,我正在尝试使用 Python Pandas 中的字典重新映射 Dataframe,但我需要使用正则表达式才能正常工作。
这里是一个字典示例:
di_cities = {
"Ain Salah (town)": "Ain Salah"
"Agadez town": "Agadez"
"Bamako city": "Bamako",
"Birnin Konni town": "Birni N Konni",
"Konni": "Birni N Konni",
"Kadunà": "Kaduna",
"Kaduna (city)": "Kaduna",
"Kano (city)": "Kano"
"Matamey": "Matamey",
"Mopti city": "Mopti"
"N'guigmi": "Nguigmi",
"Tunis": "Tunis",
"Tunis (city)": "Tunis"
}
我正在使用这个迭代:
di_cities = {rf"\b{k}\b": v for k, v in di_cities.items()}
df_cities_clean = df.replace(di_cities, regex=True)
正如您在图片中看到的(最终结果),它适用于 Bamako、Agadez、Mopti 和每个单字字符串。不适用于任何带括号的字符串,以防 Birnin Konni 有点混乱。
我正在以类似的方式使用另一本字典,但每个字符串都在括号之间,{rf"\({k}\)" 工作得很好。
你能帮帮我吗?
【问题讨论】:
-
使用
re.escape。\b不会有帮助的。 -
试试
di_cities = {rf"\b{re.escape(k)}(?:(?<=\w)\b|(?<!\w))": v for k, v in di_cities.items()}。请注意,如果您的字典有重叠的键(那些是其他(s)的前缀),它可能不起作用。这也假设您的键始终以单词 char 开头。 -
感谢维克托!这对我来说几乎是完美的!它可以完成除 Konni 之外的所有工作,即重叠键(目前只有这个键),但我通过一种解决方法解决了
-
你需要什么结果?也许你应该简单地
split(" (")并获得第一个元素 -
太好了,下次请在评论中添加
@username,以通知该用户您的反馈。
标签: python regex pandas dataframe dictionary