我有一个DataFrame,其中一列包含单词列表。
>>dataset.head(1)
>> contain
0 ["name", "Place", "ect@gtr", "nick"]
1 ["gf@e", "nobel", "play", "hi"]
我想删除所有包含'@'
的单词。在上面的示例中,我要删除"ect@gtr"
和"gf@e"
。
答案 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