2017-03-18 8 views
2

Ich habe diese Art von Pandas Datenrahmen ausgegeben, sind Spalten in der oberen Zeile:Trennung Zeilenwert in Pandas Datenrahmen

Gender,Name 
Male, Matt 57 
Male, Jack 42 
Male, David 31 
Male, John 28 
Male, Tim 51 

Mein Ziel ist es, diese Art von Ausgabe zu erhalten:

Gender,Name, Age 
Male, Matt, 57 
Male, Jack, 42 
Male, David, 31 
Male, John, 28 
Male, Tim, 51 

Wie Ich kann den Alterswert von der Spalte "Name" in eine neue Spalte mit dem Namen "Alter" ändern?

+1

'Matt 57' ist ein String? – Denziloe

Antwort

1
df.drop('Name', 1).join(
    df.Name.str.split().apply(pd.Series, index=['Name', 'Age'])) 

    Gender Name Age 
0 Male Matt 57 
1 Male Jack 42 
2 Male David 31 
3 Male John 28 
4 Male Tim 51 

Diese bekommt man auch die gleiche Sache

df.drop('Name', 1).join(
    df.Name.str.extract('(?P<Name>\S+)\s+(?P<Age>\S+)', expand=True)) 

Oder einen Schritt in die bizarre Richtung

df.assign(
    **dict(zip(
     ('Name', 'Age'), 
     zip(*np.core.defchararray.split(df.Name.values.astype(str), ' ').tolist())))) 

naive Zeit testen

enter image description here

1
split_values = df['Name'].str.split(' ', expand=True) 
df['Name'] = split_values.iloc[:, 0] 
df['Age'] = split_values.iloc[:, 1] 
print(df) 

    Gender Name Age 
0 Male Matt 57 
1 Male Jack 42 
2 Male David 31 
3 Male John 28 
4 Male Tim 51 

Oder sogar Dryer:

split_values = df['Name'].str.split(' ', expand=True) 
for ii, col_name in enumerate(['Name', 'Age']): 
    df[col_name] = split_values.iloc[:, ii] 
+0

Sieht gut aus für mich +1 – piRSquared