2016-03-29 15 views
5

Mam następującą pandasową ramkę danych. dla uproszczenia, pozwala zakładać, że ma tylko dwie kolumny: id i search_termunikanie regex w pandach str.replace

id  search_term 
37651 inline switch 

zrobić:

train['search_term'] = train['search_term'].str.replace("in."," in. ") 

spodziewa się, że zbiór danych powyżej jest nienaruszone, ale w zamian za to zbiorze :

id  search_term 
37651 in. in. switch 

co oznacza inl otrzymuje in. i ine jest replac ed przez in., tak jakbym używał wyrażeń regularnych, gdzie kropka oznacza dowolną postać.

Jak przekształcić pierwsze polecenie tak, że dosłownie in. zastępuje in. ale każdy in nie następuje kropka jest nietknięty, jak w:

a = 'inline switch' 
a = a.replace('in.','in. ') 

a 
>>> 'inline switch' 
+0

Co to ty rzeczywisty pożądany wynik? –

+0

Przepraszam, chcę dosłownie zastąpić kropkę. Poniżej zamieściłem odpowiedź, ponieważ znalazłem dobry wpis w wyrażeniu regularnym dla "kropki". Problem polega na tym, że str.replace() w ramce danych używa regex –

Odpowiedz

1

Spróbuj ucieczki .:

import pandas as pd 

df = pd.DataFrame({'search_term': ['inline switch', 'in.here']}) 
>>> df.search_term.str.replace('in\\.', 'in. ') 
0 inline switch 
1   in. here 
Name: search_term, dtype: object 
+0

dzięki Ami. Widzę, że udało ci się uciec. w pierwszym argumencie, ale co z drugim? jeśli chcesz dosłownie zastąpić "w". przez "w. "powinieneś wtedy użyć str.replace ('in \\.', 'in \\.') lub str.replace ('in \\.', 'in.')? –

+0

@AlejandroSimkievich Wydawałoby się to logiczne, ale nie. Zobacz zaktualizowany przykład powyżej. Tylko kropka w pierwszym łańcuchu jest interpretowana jako znak regex (który musi zostać zmieniony). –

+0

bardzo dziękuję Ami –

1

i oto odpowiedź: Wyrażenie regularne aby dopasować kropkę.

str.replace() w pand rzeczywiście używa wyrażenia regularnego, tak że:

df['a'] = df['a'].str.replace('in.', ' in. ') 

nie jest porównywalna z:

a.replace('in.', ' in. ') 

ten nie używać wyrażenia regularnego. Więc użyj "\." zamiast '.' w wyrażeniu, które używa wyrażenia regularnego, jeśli naprawdę masz na myśli kropkę, a nie postać.

Regular Expression to match a dot

+0

Pamiętaj jednak, że nadal możesz używać wyrażeń regex, jednocześnie stwierdzając, że kropka nie ma specjalnego znaczenia. –