【问题标题】:Create pandas dataframe from numpy array从 numpy 数组创建熊猫数据框
【发布时间】:2018-11-04 04:50:14
【问题描述】:

要从 numpy 创建一个 pandas 数据框,我可以使用:

columns = ['1','2']
data = np.array([[1,2] , [1,5] , [2,3]])
df_1 = pd.DataFrame(data,columns=columns)
df_1

如果我改为使用:

columns = ['1','2']
data = np.array([[1,2,2] , [1,5,3]])
df_1 = pd.DataFrame(data,columns=columns)
df_1

每个数组都是一列数据。但这会引发错误:

ValueError: Wrong number of items passed 3, placement implies 2

pandas 是否支持这种数据格式,还是我必须使用示例 1 中的格式?

【问题讨论】:

  • 答案很简单。 Numpy 将 数组存储为行向量(!),在错误的示例中,您传递了具有 3 个值的两行,而您只有 2 列。在第一个示例中,您传递 3 行 2 个值和 2 列,这是有效的!

标签: python arrays pandas numpy


【解决方案1】:

在第二种情况下,你可以使用:

df_1 = pd.DataFrame(dict(zip(columns, data)))

【讨论】:

    【解决方案2】:

    您需要转置您的numpy 数组:

    df_1 = pd.DataFrame(data.T, columns=columns)
    

    要了解为什么需要这样做,请考虑数组的形状:

    print(data.shape)
    
    (2, 3)
    

    形状元组中的第二个数字,或数组中的列数,必须等于数据框中的列数。

    当我们转置数组时,数组的数据和形状会被转置,使其能够被传递到具有两列的数据帧中:

    print(data.T.shape)
    
    (3, 2)
    
    print(data.T)
    
    [[1 1]
     [2 5]
     [2 3]]
    

    【讨论】:

      【解决方案3】:

      DataFrame 本质上是按照数组中的顺序创建的。

      无论哪种方式,你都需要转置一些东西。

      一种选择是指定 index=columns 然后转置整个内容。这将为您提供相同的输出。

       columns = ['1','2']
       data = np.array([[1,2,2] , [1,5,3]])
       df_1 = pd.DataFrame(data, index=columns).T
       df_1
      

      上面提到的传入data.T也是完全可以接受的(假设数据是ndarray类型)。

      【讨论】:

        猜你喜欢
        • 2017-12-01
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2014-11-22
        • 1970-01-01
        相关资源
        最近更新 更多