python pandas: заменить значение str столбца в другом столбце str специальным символом - PullRequest
0 голосов
/ 27 декабря 2018

Существует такой фрейм данных, как показано ниже.

   id     num     text
   1      1.2     price is 1.2
   1      2.3     price is 1.2 or 2.3
   2      3     The total value is $3 and $130
   3      5     The apple value is 5dollar and $150

Я хочу заменить num в тексте на символ 'UNK'

, и новый фрейм данных будет изменен на:

   id     num     text
   1      1.2     price is UNK
   1      2.3     price is 1.2 or UNK
   2      3    The total value is UNK and 130
   3      5     The apple value is UNK dollar and $150

z Мой текущий код выглядит следующим образом

df_dev['text'].str.replace(df_dev['num'], 'UNK')

и есть ошибка:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Давайте использовать regex и replace

df.text.replace(regex=r'(?i)'+ df.num.astype(str),value="UNK")
0              price is UNK
1       price is 1.2 or UNK
2    The total value is UNK
Name: text, dtype: object

#df.text=df.text.replace(regex=r'(?i)'+ df.num.astype(str),value="UNK")

Обновление

(df.text+' ').replace(regex=r'(?i) '+ df.num.astype(str)+' ',value=" UNK ")
0                      price is UNK 
1               price is 1.2 or UNK 
2    The total value is UNK and 130 
Name: text, dtype: object
0 голосов
/ 27 декабря 2018

Ошибка правильная, вы не можете передать серию методу, который ожидает строку или регулярное выражение .

Строковые методы панд не векторизованы, то есть включают Python-уровневые циклы под капотом, поэтому понимание списка может хорошо работать:

zipper = zip(df['text'], df['num'].astype(str))
df['text'] = [text.replace(num, 'UNK') for text, num in zipper]
...