web-dev-qa-db-ja.com

Numpy配列をPandas DataFrame列単位で変換(単一行として)

私はこのようなnumpy配列を持っています:

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

次に、この配列をpandas次のような論理「1列1値」のデータフレームに変換しようとしています。

columns=['age','gender','height',
     'weight','ap_hi','ap_lo',
     'cholesterol','gluc','smoke',
     'alco','active']

values = a

df = pd.DataFrame(a,columns=columns)

このアプローチではValueErrorが発生します。渡された値の形状は(1、11)、インデックスは(11、11)を意味します。私は何を間違っていますか、それを正しい方法で実行する方法は?

ありがとう!

10
Keithx

numpy.reshape が必要です:

columns=['age','gender','height',
     'weight','ap_hi','ap_lo',
     'cholesterol','gluc','smoke',
     'alco','active']

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

df = pd.DataFrame(a.reshape(-1, len(a)),columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

変形操作が読みにくい場合、1D配列に次元を追加するより明示的な方法は、 numpy.atleast_2d を使用することです

pd.DataFrame(np.atleast_2d(a), columns=columns)

または、単純に[]を追加します(ただし、列が本当に多い場合は遅くなります)。

df = pd.DataFrame([a],columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

提案 のDivakarに感謝します。

df = pd.DataFrame(a[None],columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

そして別の解決策、ありがとう piRSquared

pd.DataFrame([a], [0], columns) 
14
jezrael

データフレームに必要なものに配列を変更します。

import pandas as pd 
import numpy as np

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

columns=['age','gender','height',
 'weight','ap_hi','ap_lo',
 'cholesterol','gluc','smoke',
 'alco','active']

df = pd.DataFrame(np.reshape(a, (1,len(a))),columns=columns)
1
Alex F