Pandas 数组到列

Red*_*oar 5 python dataframe pandas

给定的

data= [
    (array([0,0,1]),1),
    (array([0,1,1]),1),
    (array([1,0,1]),0),
    (array([1,1,1]),1)    
]
Run Code Online (Sandbox Code Playgroud)

如何将其转换为 Pandas DataFrame 以便每一列都是独立的?

A   B   C   Z
0   0   1   1
0   1   1   1
1   0   1   0
1   1   1   1
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

我会用np.append我会在列表理解中

\n\n
pd.DataFrame([np.append(*row) for row in data], columns=list('ABCZ'))\n\n   A  B  C  Z\n0  0  0  1  1\n1  0  1  1  1\n2  1  0  1  0\n3  1  1  1  1\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者更有效地使用np.column_stack或者使用andzip

\n\n
pd.DataFrame(np.column_stack(list(zip(*data))), columns=list('ABCZ'))\n\n   A  B  C  Z\n0  0  0  1  1\n1  0  1  1  1\n2  1  0  1  0\n3  1  1  1  1\n
Run Code Online (Sandbox Code Playgroud)\n\n

定时

\n\n
%timeit pd.DataFrame([np.append(*row) for row in data], columns=list('ABCZ'))\n1000 loops, best of 3: 460 \xc2\xb5s per loop\n\n%timeit pd.DataFrame(np.column_stack(list(zip(*data))), columns=list('ABCZ'))\n10000 loops, best of 3: 130 \xc2\xb5s per loop\n\n%timeit pd.DataFrame([e[0].tolist()+[e[1]] for e in data],columns=['A','B','C','Z'])\n1000 loops, best of 3: 446 \xc2\xb5s per loop\n
Run Code Online (Sandbox Code Playgroud)\n