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

Posted

技术标签:

【中文标题】将 Numpy 数组按列转换为 Pandas DataFrame(作为单行)【英文标题】:Convert Numpy array to Pandas DataFrame column-wise (As Single Row) 【发布时间】:2018-01-01 18:47:40 【问题描述】:

我有一个如下所示的 numpy 数组:

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

然后我尝试将该数组转换为具有逻辑“一列一值”的 pandas 数据帧,如下所示:

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)。我做错了什么以及如何以正确的方式执行它?

谢谢!

【问题讨论】:

【参考方案1】:

你需要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  

如果 reshape 操作不清楚阅读,向一维数组添加维度的更明确的方法是使用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) 

【讨论】:

较短的一个:pd.DataFrame(a[None],columns=columns). pd.DataFrame([a], [0], columns)【参考方案2】:

只需将数组重塑为数据框所需的形状即可。

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)

【讨论】:

以上是关于将 Numpy 数组按列转换为 Pandas DataFrame(作为单行)的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas Dataframe 转换为 numpy 数组

将结构化 numpy 数组(包含子数组)转换为 pandas 数据帧

python数据分析模块:numpy、pandas全解

python 将Numpy数组转换为Pandas Dataframe

如何将一系列数组转换为 pandas/numpy 中的单个矩阵?

将 Pandas Dataframe 中的选择列转换为 Numpy 数组