Ich habe ein Dataset, in dem ich versuche, den einfachen Stadtnamen aus der längeren unordentlichen Version zu extrahieren, die hier gezeigt wird. Den meisten folgen Klammern "(. *", Aber einige folgen nicht diesem Muster und enden in ":" (siehe Zeile 200). Schließlich gibt es einige, die keine Klammern haben, sondern Teile mit einem Komma trennen ", . "(siehe Linie 240, 246)Nicht in der Lage, Zeichenfolge mit mehreren Sonderzeichen oder Muster in Python gleichzeitig zu extrahieren
'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]
Was würde ich im Idealfall gerne sehen ist:
'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
Mein Code zur Zeit ist:
df['RegionName'] = df['Region'].str.extract('(.*)[:(,]', expand=False)
Aber das gibt mir die seltsamen Ergebnis davon, dass die Klammern nicht in Ordnung gebracht werden 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
Ich habe auch versucht:
df['RegionName'] = df['Region'].str.extract('(.*)[ (.*|:|,]', expand=False)
Ich bin nicht sicher, wie genau die Zeichenfolge zu extrahieren alle drei Muster zur gleichen Zeit verwenden. Wäre offen für eine Zwei-Linien-Lösung. Dank (Entschuldigung, wenn diese schlecht formatiert!)
Danke für diese Antwort. Etwas, das ich im Dataset nicht gezeigt habe, ist, dass dort Zustände wie "Michigan \ [edit \]" aufgelistet sind, die ich löschen möchte. Früher hat der 'str.extract' diese zu NaN's gemacht und so würde ich diese fallenlassen. Aber Ihre Methode lässt sie im Datensatz (sie werden "Michigan [bearbeiten]). Wie würdest du dich darauf einstellen? Teil 2: Ich habe versucht:. 'df [ 'Region'] = df [ 'Region'] str.replace (r '(^ * \ [edit $)', np.nan)' , die gedreht alles in NaNs. Warum sollte das sein? Stattdessen ersetzte ich es durch eine leere Zelle und ersetzte dann leer bis NaN. Scheint jedoch ineffizient. Thx – Vicki
Versuchen Sie ['r '^ ([^: (,] *?) \ S * [: (,]''] (https://regex101.com/r/asdHNp/1) und verwenden Sie Ihre vorherige 'dropna "Ansatz. –