繁体   English   中英

将NDarray列表转换为数据框

[英]Convert list of NDarrays to dataframe

我正在尝试将列表ND数组转换为数据框,以便对其执行Isomap。 但这不会转换。 任何人都可以进行转换,以便可以对其进行Isomap吗?

#Creation and filling of list samples*  
samples = list()  
for i in range(72):  
 img =misc.imread('Datasets/ALOI/32/32_r'+str(i*5)+'.png' )  
 samples.append(img)  
...  
df = pd.DataFrame(samples) #This doesn't work gives  
                           #ValueError: Must pass 2-d input*  
...  
iso = manifold.Isomap(n_neighbors=4, n_components=3)  
iso.fit(df) #The end goal of my DataFrame

这很明显,不是吗? 所有图像均为2D数据,行和列。 将它们堆叠在列表中会使它获得第三维。 DataFrame本质上是2D。 因此,错误。

您有2个可能的修复:

创建一个面板

wp = pd.Panel.from_dict(zip(samples, [str(i*5) for i in range(72)]))

将一个阵列堆叠在另一个堆叠之上,或并排堆叠:

# On top of another:
df = pd.concat([pd.DataFrame(sample) for sample in samples], axis=0,
               keys=[str(i*5) for i in range(72)])

# Side by side:
df = pd.concat([pd.DataFrame(sample) for sample in samples], axis=1,
               keys=[str(i*5) for i in range(72)])

另一种方法是使用图像上的reshape方法将2D数组(图像)转换为1D数组(sklearn期望):

for i in range(yourRange):  
  img = misc.imread(yourFile)  
  samples.append(img.reshape(-1))
df = pd.DataFrame(samples)

奥利维拉几乎拥有它。

问题

运行misc.imread时,输出为NxM(2D)阵列。 将其放在列表中,使其成为3D。 DataFrame需要2D输入。

修复

在将其放入列表之前,应使用ravel对数组进行“展平”:

img =misc.imread('Datasets/ALOI/32/32_r'+str(i*5)+'.png' ).ravel()

为什么.reshape(-1)不起作用

重塑数组可以保留数组的等级。 而不是将其转换为Nx1数组,您希望它成为Nx(nothing),这就是ravel()的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM