2016-03-29 8 views
5

Ho il seguente dataframe panda. per ragioni di semplicità, lascia supporre che ha solo due colonne: id e search_termevitando espressioni regolari in panda str.replace

id  search_term 
37651 inline switch 

faccio:

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

aspettavano che il set di dati di cui sopra non è influenzato, ma ottengo in cambio di questo set di dati :

id  search_term 
37651 in. in. switch 

che significa inl è sostituito da in. e ine è replac a cura di in., come se io dovessi usare un'espressione regolare, dove dot indica qualsiasi carattere.

Come faccio a ribadire il primo comando in modo che, letteralmente, in. è sostituito dal in. ma qualsiasi in non seguito da un punto è intatta, come in:

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

a 
>>> 'inline switch' 
+0

Qual è la tua attuale output desiderato? –

+0

scusate, voglio sostituire "punto" letteralmente. Ho postato una risposta di seguito perché ho trovato un buon post sull'espressione regolare per "punto". il problema è che str.replace() in un dataframe usa regex –

risposta

1

Prova sfuggire al .:

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

grazie Ami. Vedo che sei sfuggito al. nel primo argomento, ma che dire del secondo? se vuoi letteralmente sostituire "in". da 'in. 'dovresti quindi usare str.replace (' in \\. ',' in \\. ') o str.replace (' in \\. ',' in. ')? –

+0

@ AlejandroSimkievich Sembrerebbe logico, ma no. Vedi l'esempio sopra riportato. Solo il punto nella prima stringa viene interpretato come un carattere regex (che deve essere sfuggito). –

+0

grazie mille Ami –

1

ed ecco la risposta: espressione regolare per abbinare un punto.

str.replace() in pandi utilizza infatti regex, in modo che:

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

non è paragonabile:

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

quest'ultimo non utilizza regex. Quindi usa '\.' invece di '.' in una dichiarazione che usa regex se si intende veramente punto e non un carattere.

Regular Expression to match a dot

+0

Nota, tuttavia, puoi comunque usare espressioni regex, mentre dichiari che un punto non ha significato speciale. –