IIUC, you may try numpy transpose and reshape
df.values.T.reshape(-1, int(dimension_len), int(dimension_len))
Out[30]:
array([[[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]],
[[nan, -2., nan],
[ 2., nan, nan],
[nan, nan, nan]],
[[nan, nan, 4.],
[nan, nan, 3.],
[-4., -3., nan]]])