1
votes

Rechercher et remplacer des chaînes semi-courantes dans dataframe?

J'essaie de trouver une chaîne semi-courante et de supprimer toutes les autres données de la colonne. Pandas et Re ont été importés. Par exemple, j'ai dataframe ...

TypeError: search() missing 1 required positional argument: 'string'

Je dois garder juste le RA-'numéro qui suit' et supprimer tout avant et après. Les nombres qui suivent ne sont pas toujours de la même longueur et la chaîne 'RA-' n'apparaît pas toujours à la même position. Il y a un deux-points après chaque instance qui peut être utilisé comme délimiteur.

J'ai essayé ceci (un ami a écrit le morceau de recherche regex pour moi parce que je ne le connais pas).

df.assign(DATA= df['DATA'].str.extract(re.search('RA[^:]+')))

Mais python est retourné p >

>>>df
COLUMN COUNT   DATA
           1   this row RA-123: data 8b43a
           2   here RA-5372: data 94h63c

Que me manque-t-il ici? Merci d'avance!


1 commentaires

Pas besoin de re , transmettez simplement l'expression régulière à extract


3 Réponses :



3
votes

Vous devez utiliser un groupe de capture avec extrait:

df['DATA'].str.extract(r'(RA-\d+)')

Ici, (RA- \ d +) est un groupe de capture correspondant à RA , puis un trait d'union et ensuite un ou plusieurs chiffres.

Vous pouvez utiliser votre propre modèle, mais vous devez toujours l'envelopper avec des parenthèses de capture, r '(RA [^:] +)' .


3 commentaires

Wiktor, cela fonctionne très bien et c'était une excellente explication. Merci. Par hasard, sauriez-vous comment je déclarerais un nom de colonne qui a un espace dans l'en-tête (IE: 'RA ID') à la place de l'argument après le df.assign? (Actuellement 'DATA =')


Vous pouvez utiliser la façon dont je l'ai fait dans ma réponse. df ['RA ID'] = df ['DATA']. str.extract (r '(RA- \ d +)')


Oui, si vous voulez simplement affecter les résultats à une nouvelle colonne, utilisez df ['RA ID'] = df ['DATA']. Str.extract (r '(RA- \ d +)', expand = False ) ou même df ['RA ID'] = df ['DATA']. str.extract (r '(RA- \ d +)', expand = False) .fillna ('') < / code>



0
votes

Comme je l'ai mentionné précédemment, pas besoin de re ici.

D'autres réponses ont bien expliqué comment utiliser directement extract . Cependant, pour répondre précisément à votre demande, si vous voulez vraiment utiliser re , la solution est d'utiliser re.compile au lieu de re.search code >.

df.assign(DATA= df['DATA'].str.extract(re.compile(regex_str)))


0 commentaires