将一个数组列表作为列添加到具有相同列索引的 pandas 数据帧中

9

我有一个数组列表(一维numpy数组)(a_)和一个列表(l_),想要创建一个DataFrame,以它们作为它的列。它们看起来像这样:

a_: [array([381]), array([376]), array([402]), array([400])...]
l_: [1.5,2.34,4.22,...]

我可以通过以下方式完成:

df_l = pd.DataFrame(l_)
df_a = pd.DataFrame(a_)
df = pd.concat([df_l, df_a], axis=1)

有没有更短的方法?我尝试使用pd.append

df_l = pd.DataFrame(l_)
df_l = df_l.append(a_)
然而,由于列索引都为0,它将a_添加到数据帧列的末尾,导致只有一列。是否有类似这样的东西:

l_ = l_.append(a_).reset(columns)

可以为附加的数组设置新的列索引?显然,这种方法行不通!

期望输出结果如下:

  0       0
0 1.50    381
1 2.34    376
2 4.22    402 

...

谢谢。

谢谢分享。非常好的例子,易于理解...对我很有帮助!! - Amir Md Amiruzzaman
1个回答

10

建议:

df_l = pd.DataFrame(l_) 
df_1['a_'] = pd.Series(a_list, index=df_1.index)

示例 #1:

L = list(data)
A = list(data)
data_frame = pd.DataFrame(L) 
data_frame['A'] = pd.Series(A, index=data_frame.index)

示例2 - 相同的系列长度(创建系列并将索引设置为与现有数据帧相同):

In [33]: L = list(item for item in range(10))

In [34]: A = list(item for item in range(10,20))

In [35]: data_frame = pd.DataFrame(L,columns=['L'])

In [36]: data_frame['A'] = pd.Series(A, index=data_frame.index)

In [37]: print data_frame

   L   A
0  0  10
1  1  11
2  2  12
3  3  13
4  4  14
5  5  15
6  6  16
7  7  17
8  8  18
9  9  19

示例3-不同的序列长度(创建序列并让pandas处理索引匹配):

In [45]: not_same_length = list(item for item in range(50,55))

In [46]: data_frame['nsl'] = pd.Series(not_same_length)

In [47]: print data_frame

   L   A  nsl
0  0  10   50
1  1  11   51
2  2  12   52
3  3  13   53
4  4  14   54
5  5  15  NaN
6  6  16  NaN
7  7  17  NaN
8  8  18  NaN
9  9  19  NaN
根据您的评论,看起来您想将列表添加到另一个列表中。我假设它们是以列表结构存在的,因为在Python中array()不是一种方法。要实现这个功能,您需要执行以下操作:
In [63]: A = [[381],[376], [402], [400]]

In [64]: A = [inner_item for item in A for inner_item in item]

In [65]: print A

[381, 376, 402, 400]

然后使用新数组创建Series,并按照上述步骤将其添加到您的数据框中。


非常感谢@kennes913,它起作用了,但是我的数组是这样的[array([381]), array([376])...],所以你的答案给出了一个类似于[381],[376]...的列。那么我该如何去掉括号呢? - PyLearner
我不清楚问题在哪里。你能打印输出吗? - kennes
实际上你的答案是有效的,但我觉得我没有很好地解释我的问题。我现在已经更新了它。我有两个列表,问题出在 a_ 列表上,它是一个数组的列表(a_: [array([381]), array([376]), array([402]), array([400])...]),所以使用你的答案输出是:[381],[376],[402]...,而我想要得到的是:381,376,402...。希望我表达清楚了。 - PyLearner
谢谢你,但不用了。我已经有解决方案了,就是将这两个列表都转换为数据框,然后使用pd.concat,正如问题中所解释的那样。我想知道是否有更有效的方法。你的答案确实很有用,但会增加代码行数。无论如何,感谢你的时间。 - PyLearner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接