问题描述
我有一个数据框,其中包含多行,这些行包含用逗号分隔的字符串的不同变体。而不是不断编写此代码的变体,例如df.replace('Word,','')。我正在寻找一种更简单的方法来替换python中字符串的变化。我听说过正则表达式,但在理解它时却遇到了困难。
我正在研究的一个这样的示例是df.column.str.replace('Word,?',''),它将替换Word的所有变体,而不考虑逗号的位置。但是,我不确定这是如何工作的。在理解使用正则表达式替换方面的任何帮助将不胜感激。预先谢谢你。
示例:
'Word,foo,bar'
'Word'
'foo,bar,Word'
'foo,Word,bar'
所需的输出:
'foo,bar'
''
'foo,bar'
'foo,bar'
解决方法
df.replace(to_replace='Word,|(,)?Word',value='',regex=True)
这种.replace()
方法将完成所需的工作。
to_replace
是我们的正则表达式标准,应为字符串。
'Word,'
将匹配所有字符串,除了结尾处以",Word"
的形式。
为了匹配这些结束字符串,我们提供了"|"(or)
,以便我们可以添加新的条件"(,)?Word"
。这里?
匹配0或1次出现的","
(逗号和1个空格),因此两个结束字符串以及仅匹配1个字符串"Word"
的条件
Value = ''
:显示要替换的内容
regex = True
:告诉将"to_replace"
参数视为正则表达式
您可以按照以下步骤进行操作 输入
df = pd.DataFrame([[1,'Word,foo,bar'],[2,'Word'],[3,'foo,bar,Word'],[4,Word,bar']],columns=['id','text'])
id text
1 Word,bar
2 Word
3 foo,Word
4 foo,bar
用于替换文字“ Word”以及以下逗号和空格(如果有)的代码
df['text']=df['text'].replace('Word(,\s)|(,\s)?Word','',regex=True)
代码中发生了什么
Word
:将搜索文本“单词”
(,\s)?
:将查找逗号,
,后跟空格\s
,?
将查找并匹配(如果可用),如果逗号和空格不跟随,则仅匹配单词“ Word”。因此?
在这里非常重要。
|
:它与2个表达式之一匹配(在您的情况下,这需要在第3行中使用前一个空格和逗号)
您可以在此处Regex Demo
查看详细的说明输出
id text
1 foo,bar
2
3 foo,bar
4 foo,bar