将数组列表作为列附加到具有相同列索引的pandas Data Frame

时间:2015-03-16 23:19:05

标签: python arrays numpy pandas append

我有一个数组列表(一维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_添加到dataframe列的末尾,从而生成单个列。有这样的事情:

  

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

为附加数组设置新列索引?好吧,显然这不起作用!

所需的输出如下:

  0       0
0 1.50    381
1 2.34    376
2 4.22    402 
     

...

感谢。

1 个答案:

答案 0 :(得分:7)

建议:

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

根据你的评论,看起来你想要加入你的列表列表。我假设它们在列表结构中,因为array()不是python中的方法。为此,您将执行以下操作:

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]

然后使用新阵列创建系列,并按照上述步骤添加到数据框中。