J'ai un jeu de données dans lequel j'essaie d'extraire le nom de ville simple de la version la plus désordonnée montrée ici. La plupart d'entre eux sont suivis de parenthèses "(. *", Mais certains ne suivent pas ce modèle et se terminent par ":" (voir ligne 200) Enfin, il y en a qui n'ont pas de parenthèses mais des parties séparées par une virgule ", . "(voir la ligne 240, 246)Impossible d'extraire une chaîne à l'aide de plusieurs caractères spéciaux ou d'un modèle en même temps en python
'Region'
196 Boston (Boston University, Boston College, Bos...
197 Bridgewater (Bridgewater State College)[2]
198 Cambridge (Harvard University, Massachusetts I...
199 Chestnut Hill (Boston College)
200 The Colleges of Worcester Consortium:
201 Dudley (Nichols College)
240 Faribault, South Central College
241 Mankato (Minnesota State University, Mankato),...
242 Marshall (Southwest Minnesota State University...
243 Moorhead (Minnesota State University, Moorhead...
244 Morris (University of Minnesota Morris)[2]
245 Northfield (Carleton College, St. Olaf College...
246 North Mankato, South Central College
247 St. Cloud (St. Cloud State University, The Col...
248 St. Joseph (College of Saint Benedict)[2]
249 St. Peter (Gustavus Adolphus College)[2]
ce que je voudrais idéalement voir est:
'RegionName'
196 Boston
197 Bridgewater
198 Cambridge
199 Chestnut Hill
200 The Colleges of Worcester Consortium
201 Dudley
240 Faribault
241 Mankato
242 Marshall
243 Moorhead
244 Morris
245 Northfield
246 North Mankato
247 St. Cloud
248 St. Joseph
249 St. Peter
Mon code est actuellement:
df['RegionName'] = df['Region'].str.extract('(.*)[:(,]', expand=False)
Mais cela me donne l'étrange résultat de ne pas obtenir le gréement parenthèses ht:
196 Boston (Boston University, Boston College, Bos...
197 Bridgewater
198 Cambridge (Harvard University, Massachusetts I...
199 Chestnut Hill
200 The Colleges of Worcester Consortium
201 Dudley
240 Faribault
241 Mankato (Minnesota State University, Mankato)
242 Marshall
243 Moorhead (Minnesota State University, Moorhead
244 Morris
245 Northfield (Carleton College
246 North Mankato
247 St. Cloud (St. Cloud State University
248 St. Joseph
249 St. Peter
J'ai aussi essayé:
df['RegionName'] = df['Region'].str.extract('(.*)[ (.*|:|,]', expand=False)
Je ne sais pas exactement comment extraire la chaîne en utilisant les trois modèles en même temps. Serait également ouvert à une solution à deux lignes. Merci (mes excuses si cela est formaté mal!)
Merci pour cette réponse. Quelque chose que je n'ai pas montré dans l'ensemble de données est qu'il y a des états énumérés tels que "Michigan \ [edit \]", que je veux supprimer. Auparavant, le 'str.extract' a fait ceux-ci en NaN et donc je les déposerais. Mais votre méthode les laisse dans l'ensemble de données (ils deviennent "Michigan [edit"). Comment vous adapteriez-vous à cela? Partie 2: J'ai essayé: 'df ['RegionName'] = df ['RegionName']. tout en NaN. Pourquoi cela serait-il? Au lieu de cela, je l'ai remplacé par une cellule vide, puis remplacé vide à NaN. Cela semble inefficace. Thx – Vicki
Essayez ['r '^ ([^: (,] *?) \ S * [: (,]''] (https://regex101.com/r/asdHNp/1) et utilisez votre précédent 'dropna 'approche. –