2015-10-05 73 views
0

我有一个数据集,第一列有一个系列,第二列有一个ndarray。 ndarray是由“,”分隔值组成的。 如何将值分成不同的列?将ndarray划分为不同的列

data sample: 


      id        values 
    0  390725715     (service-selection-page, 1, 3) 
    1  682669054     (mobile-apps full-page, 1, 12) 
    2  770810604    (service-selection-page, 2, 41) 
    3  1009039867    (list-property full-page, 1, 7) 
    4  1523526830     (service-selection-page, 2, 1) 
    5  1495892895     (mobile-apps full-page, 1, 24) 
    6  975125144    (service-selection-page, 1, 37) 

这里,id是一系列值是ndarray。

Expected output: 
      id      values    0  1 
0  390725715   service-selection-page  1  3 
1  682669054   mobile-apps full-page  1  12 
2  770810604   service-selection-page  2  41 
3  1009039867   list-property full-page 1  7 
4  1523526830   service-selection-page  2  1 
5  1495892895   mobile-apps full-page  1  24 
6  975125144   service-selection-page  1  37 

在此先感谢!

回答

0

df['values'].apply(lambda x: pd.Series(x))是你想要做的。

例如,如果你的df就像

In [38]: df = pd.DataFrame([[390 , pd.np.array(('service-selection-page', 1, 3))], 
          [110 , pd.np.array(('page', 1, 3))]], 
          columns=['id', 'values']) 
In [39]: df 
Out[39]: 
    id       values 
0 390 [service-selection-page, 1, 3] 
1 110     [page, 1, 3] 

其中,values包含numpy的阵列,applylambda x: pd.Series(x)df['values']

In [40]: df['values'].apply(lambda x: pd.Series(x)) 
Out[40]: 
         0 1 2 
0 service-selection-page 1 3 
1     page 1 3 

而且,你可以使用联接来扩展列。

In [41]: df.join(df['values'].apply(lambda x: pd.Series(x))) 
Out[41]: 
    id       values      0 1 2 
0 390 [service-selection-page, 1, 3] service-selection-page 1 3 
1 110     [page, 1, 3]     page 1 3 
+0

太好了,谢谢!该解决方案非常有用... – eclairs