2017-03-01 18 views
1
from pandas import DataFrame,Series 
import pandas as pd 
df 
text             region 
The Five College Region       The Five College Region 
South Hadley (Mount Holyoke College)    South Hadley 
Waltham (Bentley University), (Brandeis Univer..) Waltham 

Die Region sollte aus text extrahieren. Wenn die Zeile enthält "(", entfernen Sie alles nach "("), und entfernen Sie den Leerraum. Wenn die Zeile enthält nicht "(", behalten Sie es und kopieren Sie die Region. Ich weiß, ich kann damit umgehen mit str.extract Funktion. Aber ich bin beunruhigt rechts RegexMusterExtract Strings von Dataframe

in schriftlicher Form
df['Region'] =df['text'].str.extract(r'(.+)\(.*') 

Diese RegexMuster erste Saite nicht extrahieren kann ich erkenne auch, dass Split functon Verwendung für dieses Problem

str.split('(')[0] 

Aber ich arbeitet Ich weiß nicht, wie ich das Ergebnis in eine Spalte schreiben sollIch hoffe, dass Sie Antworten zu beiden Methoden erhalten.

Antwort

2

Option 1
assign + str.split

df.text.str.split('\s*\(').str[0] 

0 The Five College Region 
1    South Hadley 
2     Waltham 
Name: text, dtype: object 

df.assign(region=df.text.str.split('\s*\(').str[0]) 

               text     region 
0       The Five College Region The Five College Region 
1    South Hadley (Mount Holyoke College)    South Hadley 
2 Waltham (Bentley University), (Brandeis Univer..)     Waltham 

Option 2
join + str.extract

df.text.str.extract('(?P<region>[^\(]+)\s*\(*', expand=False) 

0 The Five College Region 
1    South Hadley 
2     Waltham 
Name: text, dtype: object 

df.join(df.text.str.extract('(?P<region>[^\(]+)\s*\(*', expand=False)) 

               text     region 
0       The Five College Region The Five College Region 
1    South Hadley (Mount Holyoke College)    South Hadley 
2 Waltham (Bentley University), (Brandeis Univer..)     Waltham 
+0

Könnten Sie bitte die RegexMuster "(? P [^ \ (] +) \ s * \ (*" helfen, erklären? Ich bin verwirrt darüber. –

+0

@DingruiZhang '? P ' ist eine Konvention, um die extrahierte Komponente zu benennen. Dies ergibt den Namen der extrahierten 'pd.Series'. '[^ (] +' ist ein oder mehrere Zeichen, die ** nicht ** 'sind ('. '\ s * (*' ist null oder mehr Leerzeichen gefolgt von null oder mehr '('. – piRSquared