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!
3 Réponses :
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 [^:] +)' .
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>
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)))
Pas besoin de
re, transmettez simplement l'expression régulière àextract