Python 有没有办法将numpy数组转换为数据帧,然后再转换回numpy数组,并且仍然保持原始形状?

Python 有没有办法将numpy数组转换为数据帧,然后再转换回numpy数组,并且仍然保持原始形状?,python,arrays,pandas,numpy,tensorflow,Python,Arrays,Pandas,Numpy,Tensorflow,我用dtype从npz文件加载了2个numpy数组float64&int64,还有一个形状为(10,16,12)。在这段代码中,我尝试将numpy数组转换为数据帧(用于一些必要的操作),但当我将其转换回numpy数组时,形状和数据类型会发生变化。有没有办法在这些转换后保持原始形状和数据类型 代码: 结果: Original Shape: (10, 16, 12) Original Type: float64 0

我用
dtype
从npz文件加载了2个numpy数组
float64
&
int64
,还有一个形状为
(10,16,12)
。在这段代码中,我尝试将numpy数组转换为数据帧(用于一些必要的操作),但当我将其转换回numpy数组时,形状和数据类型会发生变化。有没有办法在这些转换后保持原始形状和数据类型

代码:

结果:

Original Shape:  (10, 16, 12)
Original Type:  float64

    0                                                  1
0  42  [[-452.47690531599665, -457.24038307019396, -4...
1  48  [[-494.8202341648372, -489.2340925175253, -500...
2  49  [[-554.1111558403246, -552.5063435313488, -558...
3  60  [[-665.291405811076, -665.1201642439147, -671....
4  22  [[-718.6366745080356, -660.6800599663317, -645...
5  60  [[-867.7087743391858, -864.8980417191354, -863...
6  18  [[-538.0778606068621, -534.2985294058773, -563...
7  45  [[-417.18912118190144, -419.8508768049619, -43...
8  20  [[-597.9549743414366, -580.0114092551831, -561...
9  60  [[-704.9264411271377, -692.1625931932991, -689...

Shape after: (10,)
dtype after: object

使用更简单的3d阵列进行实验:

In [95]: arr = np.arange(24).reshape(3,2,4)
In [96]: df = pd.DataFrame(data=[np.arange(3), arr]).T
In [97]: df
Out[97]: 
   0                                     1
0  0          [[0, 1, 2, 3], [4, 5, 6, 7]]
1  1    [[8, 9, 10, 11], [12, 13, 14, 15]]
2  2  [[16, 17, 18, 19], [20, 21, 22, 23]]
In [98]: df.to_numpy()
Out[98]: 
array([[0, array([[0, 1, 2, 3],
       [4, 5, 6, 7]])],
       [1, array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])],
       [2, array([[16, 17, 18, 19],
       [20, 21, 22, 23]])]], dtype=object)
仅提取一列/系列:

In [99]: df[1].to_numpy()
Out[99]: 
array([array([[0, 1, 2, 3],
       [4, 5, 6, 7]]),
       array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]]),
       array([[16, 17, 18, 19],
       [20, 21, 22, 23]])], dtype=object)
In [100]: np.stack(_)
Out[100]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])
In [101]: _.shape
Out[101]: (3, 2, 4)
数据帧具有二维形状,该形状也显示在阵列中:

In [102]: _98.shape
Out[102]: (3, 2)
In [103]: df.shape
Out[103]: (3, 2)
柱系列为1d

构造该数据帧的另一种方法:

In [108]: pd.DataFrame({'x':np.arange(3), 'y':list(arr)})
Out[108]: 
   x                                     y
0  0          [[0, 1, 2, 3], [4, 5, 6, 7]]
1  1    [[8, 9, 10, 11], [12, 13, 14, 15]]
2  2  [[16, 17, 18, 19], [20, 21, 22, 23]]
我必须将3d阵列转换为2d阵列列表

该列表可以通过以下方式恢复(使用
Out[99]
上的变体):


使用更简单的3d阵列进行实验:

In [95]: arr = np.arange(24).reshape(3,2,4)
In [96]: df = pd.DataFrame(data=[np.arange(3), arr]).T
In [97]: df
Out[97]: 
   0                                     1
0  0          [[0, 1, 2, 3], [4, 5, 6, 7]]
1  1    [[8, 9, 10, 11], [12, 13, 14, 15]]
2  2  [[16, 17, 18, 19], [20, 21, 22, 23]]
In [98]: df.to_numpy()
Out[98]: 
array([[0, array([[0, 1, 2, 3],
       [4, 5, 6, 7]])],
       [1, array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])],
       [2, array([[16, 17, 18, 19],
       [20, 21, 22, 23]])]], dtype=object)
仅提取一列/系列:

In [99]: df[1].to_numpy()
Out[99]: 
array([array([[0, 1, 2, 3],
       [4, 5, 6, 7]]),
       array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]]),
       array([[16, 17, 18, 19],
       [20, 21, 22, 23]])], dtype=object)
In [100]: np.stack(_)
Out[100]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])
In [101]: _.shape
Out[101]: (3, 2, 4)
数据帧具有二维形状,该形状也显示在阵列中:

In [102]: _98.shape
Out[102]: (3, 2)
In [103]: df.shape
Out[103]: (3, 2)
柱系列为1d

构造该数据帧的另一种方法:

In [108]: pd.DataFrame({'x':np.arange(3), 'y':list(arr)})
Out[108]: 
   x                                     y
0  0          [[0, 1, 2, 3], [4, 5, 6, 7]]
1  1    [[8, 9, 10, 11], [12, 13, 14, 15]]
2  2  [[16, 17, 18, 19], [20, 21, 22, 23]]
我必须将3d阵列转换为2d阵列列表

该列表可以通过以下方式恢复(使用
Out[99]
上的变体):


你能从
phone
signal
arrayA数据帧中放入一些样本数据行吗?基本上,arrayA数据帧是2d的。你能从
phone和
signal
中放入一些样本数据行吗?arrayA数据帧基本上是2d的。这实际上是有效的。非常感谢。所以基本上是Numpy->Dataframe->List->Numpy。这确实有效。非常感谢。基本上就是Numpy->Dataframe->List->Numpy。