2016-08-04 60 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