2017-09-21 1 views
1

Je dois écrire strictement regular expression pour remplacer certaines valeurs dans ma base de données pandas. C'est un problème qui a été soulevé après avoir résolu la question que j'ai publiée here.Expression stricte dans Pandas remplacer

Le problème est que le .replace(idsToReplace, regex=True) n'est pas strict. Par conséquent, si les iDsToReplace sont:

NY : New York 
NYC : New York City 

et le commentaire dans lequel nous remplaçons l'ID est:

My cat from NYC is large. 

La réponse résultante est:

My cat from New York is large. 

est-il un moyen pythonique au sein le pandasreplace fonction pour rendre le regular expression plus strict pour correspondre à NYC et non NY?

+0

il n'y a pas de concept de rigueur dans regex, il correspond à ce que vous lui dites. Vous cherchez peut-être les limites de mots '\ b'. – Aaron

+0

Désolé, avez-vous besoin de remplacer 'Mon chat de NYC est grand.'' Mon chat de New York City est grand. 'Si dict est 'd = {' NYC ':' New York City ',' NY ':' New York '} '? – jezrael

+0

Le problème était que le mot NYC était capturé par NY, au lieu de New York. Ainsi, la réponse correcte est: «Mon chat de New York City est grand». Je fais quelques tests, mais jusqu'à présent, il semble que votre réponse ci-dessous travaille avec les «limites» – owwoow14

Répondre

0

Ajouter \b pour word boundaries à chaque touche de dict:

d = {'UK': 'United Kingdom', 'LA': 'Los Angeles', 'NYC': 'New York City', 'NY' : 'New York'} 

data = {'Categories': ['animal','plant','object'], 
    'Type': ['tree','dog','rock'], 
     'Comment': ['The NYC tree is very big', 'NY The cat from the UK is small', 
        'The rock was found in LA.'] 
} 

d = {r'\b' + k + r'\b':v for k, v in d.items()} 

df = pd.DataFrame(data) 

df['commentTest'] = df['Comment'].replace(d, regex=True) 
print (df) 
    Categories       Comment Type \ 
0  animal   The NYC tree is very big tree 
1  plant NY The cat from the UK is small dog 
2  object  The rock was found in LA. rock 

             commentTest 
0     The New York City tree is very big 
1 New York The cat from the United Kingdom is small 
2     The rock was found in Los Angeles.