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

我想知道社区中是否有人可以提供以下帮助:


目的是用正则表达式替换 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)


达令说
浏览 156回答 3
3回答

GCT1015

您可以使用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 pdmapping = {   "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 sweatshirt1    men sweat_shirtName: 0, dtype: object

心有法竹

试试这个代码 -mapping = {   " sweatshirt":" sweat_shirt",   " shirt":" shirts"}import pandas as pddf = pd.DataFrame ({'ID':["men sweatshirt", "black shirt"]}       )df = df.apply(lambda x: ' '+x, axis=1).replace(mapping,regex=True).ID.str.strip()print(df)

泛舟湖上清波郎朗

在您的图案中包含空白!:)mapping = {   " sweatshirt":" sweat_shirt",   " shirt":" shirts"}df = ([         ["men sweatshirt"]       ])df = df.replace(mapping,regex=True)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python