2017-05-30 120 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