【问题标题】:arrays into pandas dataframe columns将数组放入 pandas 数据框列
【发布时间】:2021-01-12 20:19:51
【问题描述】:

我有一个输出数组的程序。

例如:

[[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]

我想使用 pandas 将这些数组转换为数据框。但是,当我这样做时,这些值变成了这样的行值:

如您所见,整个数组中的每个数组都成为自己的行。我希望整个数组中的每个数组都成为具有列名的自己的列。

此外,在我的用例中,数组中的数组数量是可变的。可能有 4 个数组或 70 个数组,这意味着可能有 4 个列或 70 个。当涉及到列名时,这是有问题的,我想知道是否有在 python 中自动增加列名。

在下面查看我的尝试,告诉我如何解决这个问题。

我想要的结果只是让整个数组中的每个数组都成为自己的列而不是行,并且列的标题随着每个额外的数组/列而增加。

非常感谢。

需要帮助。请回复!

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
numpy_data= np.array(frame)

df = pd.DataFrame(data=numpy_data, columns=["column1", "column2", "column3"])
print(frame)
print(df)

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    一种方法是通过迭代列表中的每个项目将其更改为具有列名的字典,如下所示:

    df = pd.DataFrame({'column{}'.format(index):i for index, i in enumerate(frame)})
    

    或者,其他方式可能是将transpose 用于您已有的内容。对于列名,您可以在创建数据框时排除并稍后添加(不确定是否需要 numpy):

    df = pd.DataFrame(data=frame)
    
    
    df = df.T # transposing
    df.columns = ['column{}'.format(i+1) for i in df.columns] # adding column names
    

    结果(无论哪种方式):

        column1 column2 column3 column4
    0   0          0      1        2
    1   1          0      3        4
    2   0          0      3        4
    

    【讨论】:

      【解决方案2】:

      你可以transpose数组和add_prefix

      frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
      
      pd.DataFrame(np.array(frame).T).add_prefix('column')
      

      输出:

         column0  column1  column2  column3
      0        0        0        1        2
      1        1        0        3        4
      2        0        0        3        4
      

      适用于所有数量的数组

      frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4], [1,0,1], [2,0,3]]
      
      pd.DataFrame(np.array(frame).T).add_prefix('column')
      

      输出:

         column0  column1  column2  column3  column4  column5
      0        0        0        1        2        1        2
      1        1        0        3        4        0        0
      2        0        0        3        4        1        3
      

      【讨论】:

        【解决方案3】:

        一个可能的解决方案是transposing 并在将numpy 数组转换为dataframe 后重命名列。代码如下:

        import numpy as np
        import pandas as pd
        
        frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
        numpy_data= np.array(frame)
        
        #transposing later
        df = pd.DataFrame(data=numpy_data).T 
        
        #creating a list of columns using list comprehension without specifying number of columns
        df.columns = [f'mycol{i}' for i in range(0,len(df.T))] 
        
        print(df)
        

        输出

           mycol0  mycol1  mycol2  mycol3
        0       0       0       1       2
        1       1       0       3       4
        2       0       0       3       4
        

        11 列的相同代码

        import numpy as np
        import pandas as pd
        
        frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4], [5, 2, 2], [6,7,8], [8,9,19] , [10,2,4], [2,6,5], [10,2,5], [11,2,9]]
        numpy_data= np.array(frame)
        
        df = pd.DataFrame(data=numpy_data).T
        df.columns = [f'mycol{i}' for i in range(0,len(df.T))]
        
        print(df)
        
           mycol0  mycol1  mycol2  mycol3  mycol4  mycol5  mycol6  mycol7  mycol8  mycol9  mycol10
        0       0       0       1       2       5       6       8      10       2      10       11
        1       1       0       3       4       2       7       9       2       6       2        2
        2       0       0       3       4       2       8      19       4       5       5        9
        

        【讨论】:

          【解决方案4】:

          让我们试试

          pd.DataFrame(dict(zip(range(len(frame)), frame)))
             0  1  2  3
          0  0  0  1  2
          1  1  0  3  4
          2  0  0  3  4
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-09-23
            • 2021-12-11
            • 2023-03-19
            • 2016-12-14
            • 2020-04-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多