【问题标题】:numpy array to pandas dataframe conversion - ValueErrornumpy 数组到 pandas 数据帧的转换 - ValueError
【发布时间】:2018-02-22 18:30:43
【问题描述】:

我有以下名为“数据”的 numpy 数组 -

array([['ksr-usconeng101', 'C', '632.3', '1'],
       ['ksr-usconeng101', 'D', '242.9', '2'],
       ['ksr-usconeng158', 'C', '1044.5', '3'],
       ['ksr-usconeng158', 'D', '2771.2', '4'],
       ['ksr-usconeng158', 'G', '7.3', '5'],
       ['ksr-usconeng163', 'C', '1597.0', '6'],
       ['ksr-usconeng163', 'D', '1676.3', '7'],
       ['server', 'drive', 'size', '']],
      dtype='<U15')

我正在尝试将其转换为数据框 -

pd.DataFrame(data=data[0:-1,0:3],
                   index = data[0:-1,-1],
                   columns = data[-1:, 0:-1])

数据 -

data[0:-1,0:3]
Out[145]: 
array([['ksr-usconeng101', 'C', '632.3'],
       ['ksr-usconeng101', 'D', '242.9'],
       ['ksr-usconeng158', 'C', '1044.5'],
       ['ksr-usconeng158', 'D', '2771.2'],
       ['ksr-usconeng158', 'G', '7.3'],
       ['ksr-usconeng163', 'C', '1597.0'],
       ['ksr-usconeng163', 'D', '1676.3']],
      dtype='<U15')

索引 -

data[0:-1,-1]
Out[146]: 
array(['1', '2', '3', '4', '5', '6', '7'],
      dtype='<U15')

列 -

data[-1:, 0:-1]
Out[147]: 
array([['server', 'drive', 'size']],
      dtype='<U15')

但是,python 不同意并以 - 响应 -

ValueError: Shape of passed values is (3, 7), indices imply (1, 7)

请建议我缺少什么..

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    列需要是一维的:

    df = pd.DataFrame(data=data[:-1,:3],
                      index=data[:-1,-1],
                      columns=data[-1, :-1])
    print(df)
    

    输出:

             server drive    size
    1  ksr-usconeng101     C   632.3
    2  ksr-usconeng101     D   242.9
    3  ksr-usconeng158     C  1044.5
    4  ksr-usconeng158     D  2771.2
    5  ksr-usconeng158     G     7.3
    6  ksr-usconeng163     C  1597.0
    7  ksr-usconeng163     D  1676.3
    

    你有:

    >>> data[-1:, 0:-1].shape
    (1, 3)
    

    但需要:

    >>> data[-1, :-1].shape
    (3,)
    

    【讨论】:

      【解决方案2】:
      import  numpy as np, pandas as pd
      
      df = pd.DataFrame(data[0:7, 0:3].flatten().reshape(7,3),
             columns = ["a", "b", "c"])
      
                  a           b     c
      0   ksr-usconeng101     C   632.3
      1   ksr-usconeng101     D   242.9
      2   ksr-usconeng158     C   1044.5
      3   ksr-usconeng158     D   2771.2
      4   ksr-usconeng158     G   7.3
      5   ksr-usconeng163     C   1597.0
      6   ksr-usconeng163     D   1676.3
      

      【讨论】:

        【解决方案3】:

        试试这个

        pd.DataFrame(data=data[0:-1,0:3],
                           index = data[0:-1,-1],
                           columns = data[-1:, 0:-1].tolist())
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-23
          • 2018-12-31
          • 1970-01-01
          • 2021-04-04
          • 1970-01-01
          • 2019-12-05
          • 2019-02-24
          • 2020-06-25
          相关资源
          最近更新 更多