如何将 3-D Numpy 数组转换为 Pandas Dataframe?

Posted

技术标签:

【中文标题】如何将 3-D Numpy 数组转换为 Pandas Dataframe?【英文标题】:How to convert 3-D Numpy array to Pandas Dataframe? 【发布时间】:2020-07-12 13:15:50 【问题描述】:

问题: 我有一个 3-D Numpy 数组:

X

X.shape: (1797, 2, 500)

z=X[..., -1]
print(len(z))
print(z.shape)
count = 0
for bot in z:
    print(bot)
    count+=1
    if count == 3: break

以上代码产生以下输出:

1797
(1797, 2)
[23.293915 36.37388 ]
[21.594519 32.874397]
[27.29872  26.798382]

因此,有 1797 个数据点 - 每个数据点都有一个 X 和一个 Y 坐标 并且,这 1797 个点有 500 次迭代。

我想要一个这样的 DataFrame:

Index Column       |  X-coordinate  |  Y-coordinate
0                  |  X[0][0][0]    |  X[0][1][0]
0                  |  X[1][0][0]    |  X[1][1][0]
0                  |  X[2][0][0]    |  X[2][1][0]
('0') 1797 times
1                  |  X[0][0][1]    |  X[0][1][1]
1                  |  X[1][0][1]    |  X[1][1][1]
1                  |  X[2][0][1]    |  X[2][1][1]
('1' 1797 times)
.
.
.
and so on
till 500

我尝试了这里提到的技术,但 numpy/pandas 真的是在逃避我:

    How To Convert a 3D Array To a Dataframe How to transform a 3d arrays into a dataframe in python Convert numpy array to pandas dataframe easy multidimensional numpy ndarray to pandas dataframe method? numpy rollaxis - how exactly does it work?

请帮帮我。 希望我坚持提问的原则。

【问题讨论】:

提问纪律说:展示你尝试过的东西并解释为什么它不起作用。这里是权威链接:***.com/help/how-to-ask 嗨@MadPhysicist,我很抱歉。请让我更新问题。 再次向论坛和@MadPhysicist 表示诚挚的歉意,在我准备您所要求的指针时,我收到了一些对已解决我的问题的问题的答复的通知。这是我的第一个问题,从下次开始我会认真对待。 【参考方案1】:

这是一个带有示例数据的解决方案:

a,b,c = X.shape
# in your case
# a,b,c = 1797, 500

pd.DataFrame(X.transpose(1,2,0).reshape(2,-1).T,
             index=np.repeat(np.arange(c),a),
             columns=['X_coord','Y_coord'] 
            )

输出:

   X_coord  Y_coord
0        0        3
0        6        9
0       12       15
0       18       21
1        1        4
1        7       10
1       13       16
1       19       22
2        2        5
2        8       11
2       14       17
2       20       23

【讨论】:

你好@Quang,非常感谢你的及时回答。它解决了我的问题。【参考方案2】:

试试这个方法:

index = np.concatenate([np.repeat([i], 1797) for i in range(500)])
df = pd.DataFrame(index=index)
df['X-coordinate'] = X[:, 0, :].T.reshape((-1))
df['Y-coordinate'] = X[:, 1, :].T.reshape((-1))

【讨论】:

嗨@Bruno,非常感谢您的及时回复。我也试过你的方法,也解决了问题。

以上是关于如何将 3-D Numpy 数组转换为 Pandas Dataframe?的主要内容,如果未能解决你的问题,请参考以下文章

将 numpy 数组复制到 Panda 多索引中(大小相同)

Numpy与Panda简介

Numpy:如何使用数组的最后一个维度作为值?

如何将 numpy 数组列表转换为单个 numpy 数组?

如何将numpy数组列表转换为numpy数组

如何将 2D float numpy 数组转换为 2D int numpy 数组?