与Replacing part of string in python pandas dataframe
类似的问题但是它不起作用!?
佩纳斯23.4
给出以下df列:
Expression
XYZ&(ABC|DEF)
(HIJ&FTL&JKK)&(ABC|DEF)
(FML|AXY|AND)&(ABC|DEF)
我想去除每个列中可能包含的子字符串。
flag = '(ABC|DEF)'
andFlag = '&' + flag #the reasoning for doing this is that 'flag' may change
#Below are all different ways I have tried to achieve this, none have worked.
df['Expression'] = df['Expression'].replace(andFlag, '', regex=True)
df['Expression'] = df['Expression'].apply(lambda x: re.sub(andFlag, '', x))
df['Expression'] = df['Expression'].replace(to_replace=andFlag, value= '', regex=True)
df['Expression'] = df['Expression'].str.replace(andFlag, '')
df['Expression'] = df['Expression'].str.replace(andFlag, '', regex=True)
在没有使用regex=True
的情况下,我尝试了所有这些功能,但均无济于事。
预期输出:
Expression
XYZ
(HIJ&FTL&JKK)
(FML|AXY|AND)
试图弄清楚这一点我会发疯,这看起来是如此简单明了。
答案 0 :(得分:2)
括号和竖线是正则表达式中的特殊字符,因此,如果要匹配这些字符,可以在前面加上反斜杠'\',例如:
flag = '\(ABC\|DEF\)' #see this is changed
andFlag = '&' + flag
print (df['Expression'].replace(andFlag, '', regex=True))
0 XYZ
1 (HIJ&FTL&JKK)
2 (FML|AXY|AND)
Name: Expression, dtype: object
答案 1 :(得分:2)
使用str.replace
,更重要的是,将regex=False
设置为文字匹配:
df['Expression'] = df['Expression'].str.replace(andFlag, '', regex=False)
Expression
0 XYZ
1 (HIJ&FTL&JKK)
2 (FML|AXY|AND)