2017-04-04 143 views
1

我試圖拉平一列是一個列表的列表:熊貓在列中展開列表列表?

var   var2 
0 9122532.0 [[458182615.0], [79834910.0]] 
1 79834910.0 [[458182615.0], [9122532.0]] 
2 458182615.0 [[79834910.0], [9122532.0]] 

我想:

var   var2 
0 9122532.0 [458182615.0, 79834910.0] 
1 79834910.0 [458182615.0, 9122532.0] 
2 458182615.0 [79834910.0, 9122532.0] 

應用

sample8['var2'] = sample8['var2'].apply(chain.from_iterable).apply(list) 

給我:

var1  var2 
0 9122532.0 [[, 4, 5, 8, 1, 8, 2, 6, 1, 5, ., 0, ], [, 7, ... 
1 79834910.0 [[, 4, 5, 8, 1, 8, 2, 6, 1, 5, ., 0, ], [, 9, ... 
2 458182615.0 [[, 7, 9, 8, 3, 4, 9, 1, 0, ., 0, ], [, 9, 1, ... 
+6

標準警告:將非標量元素存儲在Series和DataFrames中並沒有得到很好的支持,並且可能導致模糊和難以確定的錯誤。 – DSM

回答

3

數據:

In [162]: df 
Out[162]: 
      var       var2 
0 9122532.0 [[458182615.0], [79834910.0]] 
1 79834910.0 [[458182615.0], [9122532.0]] 
2 458182615.0 [[79834910.0], [9122532.0]] 

解決方案:使用np.ravel()

In [163]: df['var2'] = df['var2'].apply(np.ravel) 

In [164]: df 
Out[164]: 
      var      var2 
0 9122532.0 [458182615.0, 79834910.0] 
1 79834910.0 [458182615.0, 9122532.0] 
2 458182615.0 [79834910.0, 9122532.0] 
1

考慮數據框df

df = pd.DataFrame(dict(
     var=[9122532.0, 79834910.0, 458182615.0], 
     var2=[[[458182615.0], [79834910.0]], 
       [[458182615.0], [9122532.0]], 
       [[79834910.0], [9122532.0]]] 
    )) 

print(df) 

      var       var2 
0 9122532.0 [[458182615.0], [79834910.0]] 
1 79834910.0 [[458182615.0], [9122532.0]] 
2 458182615.0 [[79834910.0], [9122532.0]] 

np.concatenate
你可以W/O apply
這要求所有具有相同2 x 1形狀applynp.concatenate

df.assign(var2=df.var2.apply(np.concatenate)) 

      var      var2 
0 9122532.0 [458182615.0, 79834910.0] 
1 79834910.0 [458182615.0, 9122532.0] 
2 458182615.0 [79834910.0, 9122532.0] 

。它總是可以適應另一種形狀。但是,這種方法仍然要求所有形狀都是一致的。

df.assign(var2=np.array(df.var2.tolist()).reshape(-1, 2).tolist()) 

      var      var2 
0 9122532.0 [458182615.0, 79834910.0] 
1 79834910.0 [458182615.0, 9122532.0] 
2 458182615.0 [79834910.0, 9122532.0] 

定時
小數據

enter image description here

大型數據

enter image description here