2017-05-30 173 views
1

鑑於熊貓陣列

data= [ 
    (array([0,0,1]),1), 
    (array([0,1,1]),1), 
    (array([1,0,1]),0), 
    (array([1,1,1]),1)  
] 

怎樣才能將其轉換成一個數據幀大熊貓使每列是獨立的?

A B C Z 
0 0 1 1 
0 1 1 1 
1 0 1 0 
1 1 1 1 
+0

如果您有興趣,我會更新我的答案。 – piRSquared

回答

2

我會在列表理解

pd.DataFrame([np.append(*row) for row in data], columns=list('ABCZ')) 

    A B C Z 
0 0 0 1 1 
1 0 1 1 1 
2 1 0 1 0 
3 1 1 1 1 

或者更有效地與np.column_stackzip

pd.DataFrame(np.column_stack(list(zip(*data))), columns=list('ABCZ')) 

    A B C Z 
0 0 0 1 1 
1 0 1 1 1 
2 1 0 1 0 
3 1 1 1 1 

定時使用np.append

%timeit pd.DataFrame([np.append(*row) for row in data], columns=list('ABCZ')) 
1000 loops, best of 3: 460 µs per loop 

%timeit pd.DataFrame(np.column_stack(list(zip(*data))), columns=list('ABCZ')) 
10000 loops, best of 3: 130 µs per loop 

%timeit pd.DataFrame([e[0].tolist()+[e[1]] for e in data],columns=['A','B','C','Z']) 
1000 loops, best of 3: 446 µs per loop 
+0

另一個:temp1,temp2 = np.dstack(data)[0] - pd.DataFrame(np.vstack([np.vstack(temp1).T,temp2]),columns = list('ABCZ') ),但速度不如zip –

1

將您的數組轉換爲列表列表,然後將其放入數據框中。

pd.DataFrame([e[0].tolist()+[e[1]] for e in data],columns=['A','B','C','Z']) 
Out[265]: 
    A B C Z 
0 0 0 1 1 
1 0 1 1 1 
2 1 0 1 0 
3 1 1 1 1