2016-11-03 5 views
0

Ich habe gerade angefangen, Pandas zu lernen.String Operation auf Datenrahmen und Series in Pandas mit Python

In meinem Datensatz führe ich eine Zeichenkettenoperation aus, um bestimmte Teilzeichenfolgen zu entfernen. input_dataframe ist wie folgt:

Year Australian Open Wimbledon French Open US Open 
1999 Name1    Name2  Name3   Name4 
2000 SUI:Name6(1/4)  Name7  .    USA:Name(1/14) 


s1 = input_dataframe["Wimbledon"].str.replace('\(.*|.*\:','') 
s2 = input_dataframe["French Open"].str.replace('\(.*|.*\:','') 
s3 = input_dataframe["US Open"].str.replace('\(.*|.*\:','') 
s4 = input_dataframe["Australian Open"].str.replace('\(.*|.*\:','') 

Jetzt habe ich versucht, diese 4-Serie in einen Datenrahmen concantenate von

pd.concat([s1,s2,s3,s4],axis=1) 

aber die neue Datenrahmen zeigt die alte Datenrahmen vor der String-Operation sowie die Lauf modifizierte Daten

Was ist die optimale und effektive Möglichkeit, die Zeichenfolgenoperation auf meinem Dataframe auszuführen? Und gibt es eine Möglichkeit, die Zeichenfolgenoperation auf dem Datenrahmen auszuführen, ohne eine Reihen- oder zusätzliche Variable zu erzeugen?

+0

Sie sagten: "Der neue DataFrame zeigt den alten DataFrame vor der Zeichenfolgenoperation", können Sie ein Beispiel dafür bereitstellen, wie dieser neue DataFrame aussieht? –

Antwort

0

Ich glaube, Sie Ausgabe df zuweisen müssen, aber zuerst set_index aus Spalte Year und letzte reset_index:

input_dataframe = input_dataframe.set_index('Year') 
s1 = input_dataframe["Wimbledon"].str.replace('\(.*|.*\:','') 
s2 = input_dataframe["French Open"].str.replace('\(.*|.*\:','') 
s3 = input_dataframe["US Open"].str.replace('\(.*|.*\:','') 
s4 = input_dataframe["Australian Open"].str.replace('\(.*|.*\:','') 

df = pd.concat([s1,s2,s3,s4],axis=1).reset_index() 
print (df) 
    Year Wimbledon French Open US Open Australian Open 
0 1999  Name2  Name3 Name4   Name1 
1 2000  Name7   . Name   Name6 

Wenn etwas allgemeinere Lösung benötigen, müssen list comprehension, weil String-Funktion wie str.replace funktioniert nur mit Series (Spalten von DataFrame):

df1 = input_dataframe.set_index('Year') 
df2 = pd.concat([input_dataframe[col].str.replace('\(.*|.*\:','') for col in df1], axis=1) 
df2 = df2.reset_index() 
print (df2) 
    Year Australian Open Wimbledon French Open US Open 
0 1999   Name1  Name2  Name3 Name4 
1 2000   Name6  Name7   . Name 

Oder DataFrame.replace verwenden:

data = input_dataframe.replace({'\(.*|.*\:':''}, regex=True) 
print (data) 
    Year Australian Open Wimbledon French Open US Open 
0 1999   Name1  Name2  Name3 Name4 
1 2000   Name6  Name7   . Name 
Verwandte Themen