如何用模式(正则表达式)替换字符串的一部分在数据框中抛出行

Posted

技术标签:

【中文标题】如何用模式(正则表达式)替换字符串的一部分在数据框中抛出行【英文标题】:How to replace part of string with pattern(regex) throw rows in dataframe 【发布时间】:2021-10-15 17:33:02 【问题描述】:

我的输出: df 与列final result

         final result
13649   |ReviewNG-ICV|Other
13650   |Other|ReviewNG-AO
13652   |Other|ReviewNG-AO|ReviewNG-CL
0       |Other
1       |Other
2       |Other

我想要替换(或删除部分字符串),其中特定的“|其他”与其他“标签”结合,但如果它单独在单元格中,它仍然会保留 所以需要输出:

         final result
13649   |ReviewNG-ICV
13650   |ReviewNG-AO
13652   |ReviewNG-AO|ReviewNG-CL
0       |Other
1       |Other
2       |Other

我尝试这段代码没有任何成功:

df['final result']=df['final result'].apply(lambda x: x['final result'] if x['final result']!='|Other' else 'x') 

【问题讨论】:

【参考方案1】:

你可以使用

>>> df['final result'].str.replace(r'0(?!$)|(?!^)0'.format(r'\|Other\b'), '', regex=True)
0               |ReviewNG-ICV
1                |ReviewNG-AO
2    |ReviewNG-AO|ReviewNG-CL
3                      |Other
Name: final result, dtype: object

请参阅regex demo。 详情

\|Other\b(?!$) - |Other 整个单词不在字符串的末尾 | - 或 (?!^)\|Other\b - |Other 整个单词不在字符串的开头。

【讨论】:

【参考方案2】:

我首选的解决方案是

def f(row):
    content = row['final result']
    if content != '|Other'\
    and content.startswith('|Other'):
        return content[6:] #throw away '|Other' 
    else:
        return content
    

df['final result'] = df.apply(f, axis=1)

它不使用正则表达式,因为我认为对于这样一个简单的解析来说它是一个过冲。 该函数易于阅读和理解,它将整行作为输入,因此您可以使用 axis=1 参数直接将其应用于 df。

【讨论】:

【参考方案3】:

如果只等于'|Other',那么简单的写法是:

df.loc[df['final result'] == '|Other', 'final result'] = 'x'

【讨论】:

【参考方案4】:

您可以使用列表推导:

df['final result'] = [x.replace('|Other', '') if x != '|Other' else x for x in df['final result']]

输出:

         final result
13649   |ReviewNG-ICV
13650   |ReviewNG-AO
13652   |ReviewNG-AO|ReviewNG-CL
0       |Other
1       |Other
2       |Other

【讨论】:

以上是关于如何用模式(正则表达式)替换字符串的一部分在数据框中抛出行的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式替换字符串

如何在 pySpark 中有效地从字符串数据框中替换多个正则表达式模式的所有实例?

用正则表达式替换 Pandas 数据框中字符串的某个部分

JS如何用正则表达式 获取字符串内的匹配部份?

使用python正则表达式用字符串的小数部分替换数据框列值

在 Pandas 数据框中查找和替换子字符串忽略大小写