【问题标题】:Convert Numpy array to Pandas DataFrame column-wise (As Single Row)将 Numpy 数组按列转换为 Pandas DataFrame(作为单行)
【发布时间】: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)。我做错了什么以及如何以正确的方式执行它?

谢谢!

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 2019-08-04
      • 2020-02-10
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2021-05-29
      • 2015-10-25
      相关资源
      最近更新 更多