首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用字典替换Dataframe中项的Python Pandas和regex

用字典替换Dataframe中项的Python Pandas和regex
EN

Stack Overflow用户
提问于 2021-11-09 16:05:54
回答 1查看 211关注 0票数 3

嗨,我正在尝试用Pandas中的字典重新映射Dataframe,但是我需要使用regex来使事情正常工作。

下面是dict的一个示例:

代码语言:javascript
复制
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"
}

我正在使用这个迭代:

代码语言:javascript
复制
di_cities = {rf"\b{k}\b": v for k, v in di_cities.items()}
df_cities_clean = df.replace(di_cities, regex=True)

正如你在图片中看到的(最后的结果),它对巴马科,阿加德兹,莫普提和每一个独立字串都很好。不适用于带括号的任何字符串,如果发生Birnin,Konni会搞砸一点。我正在以类似的方式使用另一种字典,但是每个字符串都在括号和{rf"\({k}\)"之间工作得很好。

你能帮帮我吗?

最终结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-15 08:04:51

我建议用

代码语言:javascript
复制
di_cities = {rf"\b{re.escape(k)}(?:(?<=\w)\b|(?<!\w))": v for k, v in di_cities.items()}

通过本词典的理解,您可以创建另一个字典,将键作为正则表达式,将前键作为以单词字符(即数字、字母、下划线、连接器标点符号)开头的全部单词,如果它们以单词字符结尾,则不会立即使用另一个单词字符。如果键没有以单词char结尾,例如,如果它以标点符号或空格结尾(可能添加.strip()会使其更安全),则不需要进行额外的边界检查。

rf"\b{re.escape(k)}(?:(?<=\w)\b|(?<!\w))"首先在键中转义所有特殊的regex元字符,然后在其前面加上一个单词边界,而(?:(?<=\w)\b|(?<!\w))是一个匹配的非捕获组。

  • (?<=\w)\b -如果前面的字符是一个单词字符,则为一个单词边界((?<!...)是一个正向后看)
  • | -或
  • (?<!\w)) -如果当前位置的左侧没有单词char,则不进行额外检查(空字符串匹配) ((?<!...)是负查找)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69901386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档