【问题标题】:How do I convert each array in the nested arrays as rows in the data-frames?如何将嵌套数组中的每个数组转换为数据框中的行?
【发布时间】:2020-08-23 13:26:40
【问题描述】:

我想将嵌套数组中的每个单独数组转换为数据帧中的每一行。例如:嵌套数组示例如下。如何在数据框中的行中创建 [[...]] 内的每个数字?有许多嵌套数组,如下所示。任何帮助,将不胜感激。谢谢你。 只是为了让事情更容易,我想将每个数组创建为数据框中的行。第一个数组的示例需要在数据框中像这样布置 *-0.14091441, 0.02556057, 0.10425788, ..., -0.03699904, 0.00503982, 0.08761989 到目前为止,我已经尝试过:


pd.concat([pd.DataFrame(arrays_list[i][0]) for i in range(len(arrays_list))]).reset_index(drop=False)

arrays_list 是我的嵌套数组。

[array([[[-0.14091441,  0.02556057,  0.10425788, ..., -0.03699904,
       0.00503982,  0.08761989]],

    [[-0.16227441,  0.03150389,  0.06440173, ..., -0.10543424,
       0.05987305,  0.04117104]],

    [[-0.11423473,  0.03741207,  0.0783961 , ..., -0.16773996,
       0.06566695,  0.0683976 ]],

    ...,

    [[-0.13789459,  0.05840103,  0.09803487, ..., -0.09256409,
       0.01833008,  0.08413954]],

    [[-0.12652887,  0.03683193,  0.06100509, ..., -0.06188103,
       0.00915053,  0.09518969]],

    [[-0.19781192,  0.05750425,  0.14811654, ..., -0.10550601,
       0.05405622,  0.13771409]]]),

 array([[[-0.0375578 ,  0.16006446,  0.07978896, ..., -0.0883253 ,
       0.0057608 ,  0.07953031]],

    [[ 0.00282089,  0.18854009,  0.01686837, ..., -0.02981209,
      -0.01220972,  0.02810074]],

    [[ 0.0333602 ,  0.21895081,  0.05255894, ..., -0.01882036,
      -0.03316848,  0.02506595]],

    ...,

    [[-0.02498044,  0.17067145,  0.03956907, ..., -0.00617604,
       0.01254308,  0.03375499]],

    [[ 0.0333602 ,  0.21895081,  0.05255894, ..., -0.01882036,
      -0.03316848,  0.02506595]],

    [[ 0.01105822,  0.20526624,  0.05087842, ..., -0.0442748 ,
      -0.08184794,  0.04356682]]]),
 array([[[-1.16298698e-01,  6.60857707e-02,  4.37349118e-02, ...,
       5.65935597e-02,  1.17720775e-01,  4.68457118e-02]],

    [[-1.70329705e-01,  7.15664029e-02,  2.13463139e-02, ...,
       8.40441436e-02,  3.38792875e-02, -9.66352411e-04]],

    [[-1.38925180e-01,  6.48617744e-02,  7.50765130e-02, ...,
       3.60708833e-02,  9.37591046e-02,  3.88324559e-02]],

    ...,

    [[-1.38925180e-01,  6.48617744e-02,  7.50765130e-02, ...,
       3.60708833e-02,  9.37591046e-02,  3.88324559e-02]],

    [[-1.55961111e-01,  7.59401619e-02,  3.65645029e-02, ...,
       9.78165418e-02,  9.37420279e-02,  5.14532737e-02]],

    [[-1.19004108e-01,  6.59743100e-02,  7.72421211e-02, ...,
       4.89978008e-02,  1.33881345e-04,  2.18758285e-02]]])]

出于这个问题的目的,这里是一个类似的mre。

from numpy.random import default_rng
rng = default_rng()

a = rng.integers(0,5,(6,1,6))
b = rng.integers(0,5,(6,1,6))
c = rng.integers(0,5,(6,1,6))
# or just
# np.random.randint(0,5,(6,1,6))
obj = [a,b,c]

【问题讨论】:

  • 您的阵列的形状是什么?您能否提供一些生成类似(较小)数组的代码以及您预期的数据帧结果?
  • 我已经编辑了帖子。你能看看吗
  • @user32882 - 这是一个包含三个形状为 (x,1,y) 的数组的列表。
  • 在询问依赖数据的代码时,重要的是在您的问题中包含数据的最小示例。有时您可能想为问题创建假数据 - 只要它忠实地代表实际数据。您越容易让 us 从您的问题中复制和粘贴(以便我们可以执行您的代码并测试我们的解决方案),您获得响应的可能性就越大。 - 请阅读minimal reproducible example

标签: python arrays pandas multidimensional-array


【解决方案1】:

以您提供的可重现示例为例,假设您想要一个数据框作为结果(a、b 和 c 具有相同的形状)。

我将首先使用 numpy.stack() 将数组列表中的所有数组作为一个数组进行垂直堆叠。

然后我会将形状 1 的中间尺寸切掉。

然后我调用 pandas.DataFrame() 构造函数,你应该得到你的结果。

df = pd.DataFrame(np.vstack(obj)[:,0,:])

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多