我有一个图像列表,我希望在一个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来提高效率?
答案 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