2016-08-04 146 views
2

我在Excel中有一列包含名字,姓氏和職務名稱。只有可觀察到的模式是 - 在每組3行中,每一行都是名,第二行是姓,第三行是職位。我要創建3個不同的列和隔離這些數據 樣本數據:將數據從一列分成三列

John 
Bush 
Manager 
Katrina 
Cohn 
Secretary 

我想:約翰,布什Manager作爲下名,分別姓和職位在三個不同的列一排去。 Like -

First Name Last Name Job Title 
John   Bush   Manager 
Katrina  Cohn   Secretary 

我們如何才能完成這項任務?

回答

0
s = pd.Series([ 
     'John', 
     'Bush', 
     'Manager', 
     'Katrina', 
     'Cohn', 
     'Secretary']) 

df = pd.DataFrame(s.values.reshape(-1, 3), 
        columns=['First Name', 'Last Name', 'Job Title']) 

df 

enter image description here


如果你的數據的長度不是3的倍數,那麼你可以迫使它這樣的:

s = pd.Series([ 
     'John', 
     'Bush', 
     'Manager', 
     'Katrina', 
     'Cohn', 
     'Secretary', 
     'Bogus']) 

s_ = s.iloc[:s.shape[0] // 3 * 3] 
df = pd.DataFrame(s_.values.reshape(-1, 3), columns=['First Name', 'Last Name', 'Job Title']) 

df 

enter image description here

+0

ValueError異常:新陣列的總大小必須保持不變 – ComplexData

+0

@ user6461192這意味着你的系列的長度是3參見編輯後多不。 – piRSquared

+0

謝謝你的工作。如果我們需要以excel作爲輸入,我們可以做些什麼,而不是硬編碼 – ComplexData

3

您可以使用this notation來獲取具有不同起點的每個第三個元素。

l = ['John', 'Bush', 'Manager', 'Katrina', 'Cohn', 'Secretary'] 

pd.DataFrame({'First Name': l[::3], 'Last Name': l[1::3], 'Job Title': l[2::3]}) 

輸出

First Name Job Title Last Name 
0  John Manager  Bush 
1 Katrina Secretary  Cohn 
+0

ValueError異常:數組必須是相同的長度 – ComplexData