Удалить все слова, содержащие '@', из списка в DataFrame - PullRequest
0 голосов
/ 03 июля 2018

У меня есть DataFrame, в котором один столбец содержит списки слов.

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

Я хочу удалить все слова, которые содержат '@'. В приведенном выше примере я хочу удалить "ect@gtr" и "gf@e".

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Использовать 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
0 голосов
/ 03 июля 2018

Попробуйте это

ab= np.column_stack([~df[col].str.contains(r"@") for col in df])
new_df=df.loc[ab.any(axis=1)]
print(new_df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...