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