将相同键的行组合成单个数组

时间:2017-06-07 13:50:46

标签: python pandas

我有一个pandas数据帧如下:

    error
 0: [[0.1,0.4,-0.3]]
 1: [[-0.6,-0.3,0.2]]
 .
 .
 .
 99: [[0.4,-0.7,0.1]]

我想将所有值组合成一个像这样的数组:

 [0.1,0.4,-0.3,-0.6,-0.3,0.2,...,0.4,-0.7,0.1]

使用pandas有没有快速的方法,或者我需要迭代数据并“手动”构建数组? 在这种情况下,数据顺序并不重要。

在更一般的情况下,如何组合不具有相同大小的数组(例如,第0行包含3个元素的数组,第1行包含6个元素的数组等等)?

2 个答案:

答案 0 :(得分:2)

使用numpy.ravel

L = np.array(df['error'].values.tolist()).ravel().tolist()
print (L)
[0.1, 0.4, -0.3, -0.6, -0.3, 0.2, 0.4, -0.7, 0.1]

使用str[0]选择嵌套lists的更一般解决方案:

print (df)
               error
0   [[0.1,0.4,-0.3]]
1      [[-0.6,-0.3]]
99  [[0.4,-0.7,0.1]]

from  itertools import chain

L = list(chain.from_iterable(df['error'].str[0]))
print (L)
[0.1, 0.4, -0.3, -0.6, -0.3, 0.4, -0.7, 0.1]

L =  np.concatenate(df['error'].str[0].values).tolist()
print (L)
[0.1, 0.4, -0.3, -0.6, -0.3, 0.4, -0.7, 0.1]

答案 1 :(得分:1)

df=pd.DataFrame([[0.1,0.4,-0.3],[-0.6,-0.3,0.2]])

df.values.flatten()

将返回: 数组([0.1,0.4,-0.3,-0.6,-0.3,0.2])

如果您想按列添加元素

df.values.flatten(order='F')

然后会返回: 数组([0.1,-0.6,0.4,-0.3,-0.3,0.2])