【问题标题】:create dataframe from unequal sized list objects with different non integer indicies从具有不同非整数索引的大小不等的列表对象创建数据框
【发布时间】:2020-02-22 06:01:23
【问题描述】:

我有一个 numpy 数组列表 - 例如:

我们称之为 LIST_A:

[array([  0.        , -11.35190205,  11.35190205,   0.        ]),
 array([  0.        ,  36.58012599, -36.58012599,   0.        ]),
 array([  0.        , -41.94408202,  41.94408202,   0.        ])]

我有一个列表列表,它们是上述 numpy 数组列表中每个 numpy 数组的索引:

让我们称之为 List_B:

[['A_A', 'A_B', 'B_A', 'B_B'],
 ['A_A', 'A_D', 'D_A', 'D_D'],
 ['B_B', 'B_C', 'C_B', 'C_C']]

我想从这些对象中创建一个pandas dataframe,但我不确定如何在不首先为 LIST_A 中的每个 numpy arrays 及其在 LIST_B 中的关联索引创建系列对象的情况下执行此操作(即 LIST_A[0]的索引是LIST_B[0] 等),然后执行pd.concat(s1,s2,s3...) 以获取所需的数据帧。

在上述情况下,我可以按如下方式构造所需的数据框:

s1 = pd.Series(list_a[0], index=list_b[0])
s2 = pd.Series(list_a[1], index=list_b[1])
s3 = pd.Series(list_a[2], index=list_b[2])
df = pd.concat([s1,s2,s3], axis=1)

            0          1          2
A_A   0.000000   0.000000        NaN
A_B -11.351902        NaN        NaN
A_D        NaN  36.580126        NaN
B_A  11.351902        NaN        NaN
B_B   0.000000        NaN   0.000000
B_C        NaN        NaN -41.944082
C_B        NaN        NaN  41.944082
C_C        NaN        NaN   0.000000
D_A        NaN -36.580126        NaN
D_D        NaN   0.000000        NaN

在我的实际应用程序中,上述列表的大小为数百个,因此我不想创建数百个系列对象然后将它们全部连接起来(除非这是唯一的方法?)。

我已经阅读了关于 SO 的各种帖子,例如:Adding list with different length as a new column to a dataframeconvert pandas series AND dataframe objects to a numpy array,但是对于需要创建数百个系列对象才能生成所需的数据框。

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    与您的方法没有太大不同,但这应该会更快:

    df = pd.DataFrame(dict(zip(list_b[i], list_a[i])) for i in range(len(list_a))).T         
    

    输出:

                 0          1          2
    A_A   0.000000   0.000000        NaN
    A_B -11.351902        NaN        NaN
    A_D        NaN  36.580126        NaN
    B_A  11.351902        NaN        NaN
    B_B   0.000000        NaN   0.000000
    B_C        NaN        NaN -41.944082
    C_B        NaN        NaN  41.944082
    C_C        NaN        NaN   0.000000
    D_A        NaN -36.580126        NaN
    D_D        NaN   0.000000        NaN
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2012-07-16
      • 2020-11-10
      • 2019-09-29
      • 2019-08-23
      相关资源
      最近更新 更多