【问题标题】:Transform list to dataframe efficiently有效地将列表转换为数据框
【发布时间】:2017-08-11 13:33:16
【问题描述】:

我有一个图像列表,我想将每个图像的所有像素放在一个 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

【问题讨论】:

标签: python python-2.7 pandas numpy


【解决方案1】:

我认为您可以将numpy.repeat 用于str.len 的长度重复值和chain 嵌套lists 的平面值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2020-04-17
    相关资源
    最近更新 更多