我有一个二维numpy数组:
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
我如何将其转换为pandas数据框,将该坐标处的x坐标,y坐标和相应的数组值转换为pandas数据框,如下所示:
x y val
0 0 1
0 1 4
0 2 7
1 0 2
1 1 5
1 2 8
...
答案 0 :(得分:6)
使用堆栈和重置索引:
df = pd.DataFrame(arr).stack().rename_axis(['y', 'x']).reset_index(name='val')
df
Out:
y x val
0 0 0 1
1 0 1 2
2 0 2 3
3 1 0 4
4 1 1 5
5 1 2 6
6 2 0 7
7 2 1 8
8 2 2 9
如果订购很重要:
df.sort_values(['x', 'y'])[['x', 'y', 'val']].reset_index(drop=True)
Out:
x y val
0 0 0 1
1 0 1 4
2 0 2 7
3 1 0 2
4 1 1 5
5 1 2 8
6 2 0 3
7 2 1 6
8 2 2 9
答案 1 :(得分:1)
这是一个NumPy方法 -
>>> arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> shp = arr.shape
>>> r,c = np.indices(shp)
>>> pd.DataFrame(np.c_[r.ravel(), c.ravel(), arr.ravel('F')], \
columns=((['x','y','val'])))
x y val
0 0 0 1
1 0 1 4
2 0 2 7
3 1 0 2
4 1 1 5
5 1 2 8
6 2 0 3
7 2 1 6
8 2 2 9