从数据帧列中删除部分字符串

2024-09-28 13:09:45 发布

您现在位置:Python中文网/ 问答频道 /正文

类似问题: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)

我想弄明白这一点有点疯狂,它看起来是那么简单和直截了当。你知道吗


Tags: truedfdefreplaceregexflagabcexpression
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)

括号和竖线是正则表达式中的特殊字符,因此如果要匹配这些字符,可以在前面添加反斜杠“\”,例如:

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

相关问题 更多 >

    热门问题