将列表有效转换为数据框

时间:2017-03-20 10:08:46

标签: python python-2.7 pandas numpy

我有一个图像列表,我希望在一个DataFrame列中获取每个图像的所有像素,并将图像的编号放到另一列中。我试图用

来做
plotDF = DataFrame()
plotData = [np.array([[1,2,1],[1,1,2],[4,2,1]]), np.array([[1,2,2,1],[1,3,1,3]]), np.array([[1,1,2,3],[4,1,1,1],[1,1,1,4]])]
plotData = [image.flatten() for image in plotData]
for n, pD in zip(range(len(plotData)), plotData):
    for pixel in pD:
        plotDF = plotDF.append(DataFrame.from_records([{'n': n, 'pixel': pixel}]))
plotDF = plotDF.reset_index(drop=True)

但这似乎效率很低。

如何使用https://github.com/kieferk/dfply来提高效率?

1 个答案:

答案 0 :(得分:1)

我认为您可以numpy.repeat使用str.len来表示重复值,{{3}}可以使用嵌套lists的平面值chain

from  itertools import chain

s = pd.Series(plotData)
df2 = pd.DataFrame({
        "n": np.repeat(s.index + 1, s.str.len()),
        "pixel": list(chain.from_iterable(s))})
print (df2)
    n  pixel
0   1      1
1   1      2
2   1      1
3   1      1
4   1      1
5   1      2
6   1      4
7   1      2
8   1      1
9   2      1
10  2      2
11  2      2
12  2      1
13  2      1
14  2      3
15  2      1
16  2      3
17  3      1
18  3      1
19  3      2
20  3      3
21  3      4
22  3      1
23  3      1
24  3      1
25  3      1
26  3      1
27  3      1
28  3      4