如何从pandas数据帧中的列中删除字符串值

seq*_*ard 5 python regex lambda dataframe pandas

我试图编写一些代码,用逗号分隔数据帧列中的字符串(因此它成为一个列表),并从该列表中删除某个字符串(如果存在).删除不需要的字符串后,我想在逗号处再次加入列表元素.我的数据框看起来像这样:

df:

   Column1  Column2
0      a       a,b,c
1      y       b,n,m
2      d       n,n,m
3      d       b,b,x
Run Code Online (Sandbox Code Playgroud)

所以基本上我的目标是从column2中删除所有b值,以便我得到:

DF:

   Column1  Column2
0      a       a,c
1      y       n,m
2      d       n,n,m
3      d       x
Run Code Online (Sandbox Code Playgroud)

我写的代码如下:

df=df['Column2'].apply(lambda x: x.split(','))

def exclude_b(df):
    for index, liste in df['column2].iteritems():
        if 'b' in liste:
            liste.remove('b')
            return liste
        else:
            return liste
Run Code Online (Sandbox Code Playgroud)

第一行将列中的所有值拆分为逗号分隔列表.现在,我尝试迭代所有列表并删除b(如果存在),如果不存在则返回列表.如果我在末尾打印'liste',它只返回Column2的第一行,而不返回其他行.我究竟做错了什么?是否有办法将我的if条件实现为lambda函数?

Nad*_*ham 11

只需你可以应用正则表达式b,?,这意味着替换if存在 后的任何值b,b

df['Column2'] = df.Column2.str.replace('b,?' , '')

Out[238]:
Column1 Column2
0   a   a,c
1   y   n,m
2   d   n,n,m
3   d   x
Run Code Online (Sandbox Code Playgroud)