将Numpy数组按列转换为Pandas DataFrame(作为单行)

时间:2017-07-26 12:31:06

标签: python arrays pandas numpy

我有一个看起来像这样的numpy数组:

New

然后我尝试将该数组转换为带有逻辑"一列-1值的"的pandas数据帧。像这样:

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

这种方法引发了ValueError:传递值的形状是(1,11),索引暗示(11,11)。我做错了什么以及如何以正确的方式执行它?

谢谢!

2 个答案:

答案 0 :(得分:13)

您需要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 suggestion

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) 

答案 1 :(得分:1)

只需将数组重新整形为数据帧所需的内容。

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)