从DataFrame的列表中删除所有包含“ @”的单词

时间:2018-07-03 05:36:46

标签: regex python-3.x list pandas dataframe

我有一个DataFrame,其中一列包含单词列表。

>>dataset.head(1)
>>               contain
  0            ["name", "Place", "ect@gtr", "nick"]
  1            ["gf@e", "nobel", "play", "hi"]

我想删除所有包含'@'的单词。在上面的示例中,我要删除"ect@gtr""gf@e"

2 个答案:

答案 0 :(得分:0)

尝试这个

ab= np.column_stack([~df[col].str.contains(r"@") for col in df])
new_df=df.loc[ab.any(axis=1)]
print(new_df)

答案 1 :(得分:0)

使用list comprehension进行过滤,此处无需使用正则表达式:

df =  pd.DataFrame({'contain':[['name', 'Place', 'ect@gtr', 'nick'],
                               ['gf@e', 'nobel', 'play', 'hi']]})
print (df)
                        contain
0  [name, Place, ect@gtr, nick]
1       [gf@e, nobel, play, hi]

df.contain = df.contain.apply(lambda x: [y for y in x if '@' not in y])

或者:

df.contain = [[y for y in x if '@' not in y] for x in df.contain]

print (df)
               contain
0  [name, Place, nick]
1    [nobel, play, hi]

编辑:要删除字符串中的值,请在split中加上join

df =  pd.DataFrame({'contain':['name Place ect@gtr nick',"gf@e nobel play hi"]})
print (df)

                   contain
0  name Place ect@gtr nick
1       gf@e nobel play hi

df.contain = df.contain.apply(lambda x: ' '.join([y for y in x.split() if '@' not in y]))
print (df)
           contain
0  name Place nick
1    nobel play hi