2016-02-17 3 views
0

У меня есть такой кадр данных:Как заменить несколько символов в строке кадра данных в пандах?

#v1 v2 v3 v4 v5 
a b  b  c 1 1 2 2 2 3 3 3 3 4 4 4 4 4 4 ... 
.... 

Как вы видите, v5 столбец содержит word id. И у меня есть список word id для удаления:

toRve = ['1','3','5'.....] 

И я пишу for loop, чтобы удалить word id в списке:

for i in toRve: 
    df[v5] = df[v5].str.replace("{0} ".format(i), "") 

Но я получил этот результат:

#v1 v2 v3 v4 v5 
    a b  b  c 222444444 ... 
.... 

Как 22 23 считался 2 + 2 + 23 поэтому он был изменен на 223. У вас есть хорошая идея решить эту проблему? Заранее спасибо!

Почему все пространство ушло? Не могли бы вы помочь мне? Заранее спасибо!

+0

@jezrael Спасибо за ответ. Но это вызовет много избыточных пробелов, а '22' изменится на' 2'. Я хочу, чтобы «i' (2) был удален. – user5779223

ответ

1

Вы можете использовать apply метод для запуска функции для каждого элемента:

import pandas as pd 

s = pd.Series([ 
     "1 1 2 2 3 3 4 4 5 5 6 6 6", 
     "3 4 2 1 2 3 4 4 5 5 4 34 2" 
    ]) 

todel = set(["1", "3", "5"]) 
s.apply(lambda x:" ".join(v for v in x.strip().split() if v not in todel)) 

выход:

0  2 2 4 4 6 6 6 
1 4 2 2 4 4 4 34 2 
dtype: object 
+0

Спасибо за ваш ответ. Это кажется очень перспективным! Но как сделать пространство перед удалением первого символа? Это повлияет на обучение моей модели. Большое спасибо. – user5779223

+0

Я отредактировал код, пожалуйста, проверьте его. – HYRY

+0

Он работает! Большое спасибо! – user5779223