3D numpy 数组到 Pandas 数据帧不匹配值
3D numpy array to Pandas dataframe mismatch values
我有以下形状的 numpy 3D 数组:(688, 549, 3).
每个维度都是一个图像。所有维度 dtype 都是 'float64',然而,第三个维度只有整数(但由于 dtype,它们被保存为浮点数,例如。isntad of 3 它将是 3.0 )。
我正在尝试将数组转换为数据框。
我使用这个脚本:
pd.DataFrame(array.reshape([3,-1]).T,columns=['band1','band2','classes'])
>>> band1 vband2 classes
0 NaN -19.110207 -10.134580
1 NaN -28.449677 -15.704137
2 0.0 2.000000 2.000000
3 NaN -19.117571 -10.166842
4 NaN -28.500092 -15.727423
....
如您所见,结果不匹配 - 列“类”应该只是 1-4 之间的整数,而前两列应该是浮点负数。但可以看出第2行在第2列得到了“类”列的值,一般来说是不匹配的。
我以前使用过这种方法从 3D 甚至更多维数组创建数据框,但出于某种原因我还可以找到,在这种情况下我得到非常不匹配的数据框。
我的问题是,为什么会发生这种不匹配?我该如何解决?
***为了生成模拟数据集:
band1= np.random.uniform(low=-20, high=-0.1, size=(688, 549))
band2= np.random.uniform(low=-8, high=-0.1, size=(688, 549))
classes=np.random.randint(4, size=(688, 549))
array=np.dstack((band1,band2,classes))
pd.DataFrame(array.reshape([3,-1]).T,columns=['band1','band2','classes'])
我的最终目标:拥有数据框,当每个波段是一列时
我想这就是你想要的:
pd.DataFrame(array.reshape([-1,3]),columns=['band1','band2','classes'])
输出:
band1 band2 classes
0 -18.785736 -3.710138 0.0
1 -18.922210 -3.469634 0.0
2 -15.049059 -4.815290 0.0
3 -12.835178 -6.440274 1.0
4 -1.855383 -3.362667 2.0
... ... ... ...
377707 -5.288869 -6.399208 2.0
377708 -10.594781 -6.191891 3.0
377709 -2.223590 -0.230346 3.0
377710 -12.577054 -3.737268 3.0
377711 -15.462419 -2.691705 2.0
我有以下形状的 numpy 3D 数组:(688, 549, 3).
每个维度都是一个图像。所有维度 dtype 都是 'float64',然而,第三个维度只有整数(但由于 dtype,它们被保存为浮点数,例如。isntad of 3 它将是 3.0 )。
我正在尝试将数组转换为数据框。 我使用这个脚本:
pd.DataFrame(array.reshape([3,-1]).T,columns=['band1','band2','classes'])
>>> band1 vband2 classes
0 NaN -19.110207 -10.134580
1 NaN -28.449677 -15.704137
2 0.0 2.000000 2.000000
3 NaN -19.117571 -10.166842
4 NaN -28.500092 -15.727423
....
如您所见,结果不匹配 - 列“类”应该只是 1-4 之间的整数,而前两列应该是浮点负数。但可以看出第2行在第2列得到了“类”列的值,一般来说是不匹配的。
我以前使用过这种方法从 3D 甚至更多维数组创建数据框,但出于某种原因我还可以找到,在这种情况下我得到非常不匹配的数据框。
我的问题是,为什么会发生这种不匹配?我该如何解决?
***为了生成模拟数据集:
band1= np.random.uniform(low=-20, high=-0.1, size=(688, 549))
band2= np.random.uniform(low=-8, high=-0.1, size=(688, 549))
classes=np.random.randint(4, size=(688, 549))
array=np.dstack((band1,band2,classes))
pd.DataFrame(array.reshape([3,-1]).T,columns=['band1','band2','classes'])
我的最终目标:拥有数据框,当每个波段是一列时
我想这就是你想要的:
pd.DataFrame(array.reshape([-1,3]),columns=['band1','band2','classes'])
输出:
band1 band2 classes
0 -18.785736 -3.710138 0.0
1 -18.922210 -3.469634 0.0
2 -15.049059 -4.815290 0.0
3 -12.835178 -6.440274 1.0
4 -1.855383 -3.362667 2.0
... ... ... ...
377707 -5.288869 -6.399208 2.0
377708 -10.594781 -6.191891 3.0
377709 -2.223590 -0.230346 3.0
377710 -12.577054 -3.737268 3.0
377711 -15.462419 -2.691705 2.0