我有一个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个元素的数组等等)?
答案 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])