为了账号安全,请及时绑定邮箱和手机立即绑定

pandas dataframe:根据字典替换单元格中的(独立)子字符串

pandas dataframe:根据字典替换单元格中的(独立)子字符串

达令说 2023-07-11 16:00:11
我想知道社区中是否有人可以提供以下帮助:目的是用正则表达式替换 pandas DataFrame 中的子字符串(基于我作为参数传递的字典)。尽管键:值替换仅应在字典键被发现为独立子字符串(而不是单词的一部分)时发生。我所说的独立子字符串是指它在空格之后开始以前的:mapping = {   "sweatshirt":"sweat_shirt",   "sweat shirt":"sweat_shirt",   "shirt":"shirts"}df = pd.DataFrame([         ["men sweatshirt"]         ["men sweat shirt"]         ["yellow shirt"]       ])df = df.replace(mapping,regex=True)预期结果:运动衫中的子字符串“shirt”不应替换为“shirts”,因为值是另一个字符串的一部分而不是独立值(\b)注意:我传递的字典相当长,所以理想情况下有一种方法可以将独立要求(\b)作为我传递的字典的一部分传递df.replace(dict, regex=True)
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以使用


df[0].str.replace(fr"\b(?:{'|'.join([x for x in mapping])})\b", lambda x: mapping[x.group()])

正则表达式看起来像\b(?:sweatshirt|shirt)\b,它将匹配sweatshirt或shirt作为整个单词。匹配将被传递给 lambda,并且将使用 获取相应的值mapping[x.group()]。


多字搜索词更新


由于您可能需要在键中搜索多字词mapping,因此您应该确保最长的搜索词在交替组中排在第一位。即,\b(?:abc def|abc)\b而不是\b(?:abc|abc def)\b。


import pandas as pd


mapping = {

   "sweat shirt": "sweat_shirt",

   "shirt": "shirts"

}


df = pd.DataFrame([

         ["men sweatshirt"],

         ["men sweat shirt"]

       ])

rx = fr"\b(?:{'|'.join(sorted([x for x in mapping],key=len,reverse=True))})\b"

df[0].str.replace(rx, lambda x: mapping[x.group()])

输出:


0     men sweatshirt

1    men sweat_shirt

Name: 0, dtype: object


查看完整回答
反对 回复 2023-07-11
?
心有法竹

TA贡献1866条经验 获得超5个赞

试试这个代码 -


mapping = {


   " sweatshirt":" sweat_shirt",

   " shirt":" shirts"

}


import pandas as pd

df = pd.DataFrame ({'ID':["men sweatshirt", "black shirt"]}

       )


df = df.apply(lambda x: ' '+x, axis=1).replace(mapping,regex=True).ID.str.strip()

print(df)


查看完整回答
反对 回复 2023-07-11
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

在您的图案中包含空白!:)


mapping = {


   " sweatshirt":" sweat_shirt",

   " shirt":" shirts"


}


df = ([

         ["men sweatshirt"]

       ])


df = df.replace(mapping,regex=True)


查看完整回答
反对 回复 2023-07-11
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信