首页 > 解决方案 > 从具有不同行长的数据帧创建一个 3D 数组

问题描述

我有一个这样的数据框:

在此处输入图像描述

仅使用时间、经度和纬度列,我想要的是创建一个形状为 (2,16,2) 的 3D 数组,其中第一个维度是时间(在这种情况下,有 2 次:2 或 3) ,第二个是代表每对lat-lon坐标的总行数,最后一个维度是lat-lon对。

3d 数组应该是这样的:

    array([[[ 85.573875, -50.856796],
    [ 22.516417, -64.196556],
    [  4.072308, -48.226948],
    [ 24.439985, -47.150661],
    [129.924103, -50.699009],
    [296.879486, -20.473812],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan]],

   [[282.733734, -58.982613],
    [346.649414, -49.212891],
    [105.564247, -59.02515 ],
    [ 77.098854, -61.031345],
    [ 93.66552 , -52.018295],
    [ 26.899933, -65.549835],
    [  8.558081, -48.222881],
    [ 28.211027, -50.188721],
    [137.030777, -51.931877],
    [295.907715, -20.918041],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan],
    [       nan,        nan]]])

您可以从数据框中注意到,对于每个时间值(2 和 3),都有不同数量的数据/行。所以想法是,就在第一次从 2 变为 3 之前,剩余的空值必须用 NaN 填充,然后移动到第二次(time=3)。NaN 值的目的是保持数组 (2,16,2) 的形状。

我不知道我是否说清楚了。有谁能够帮我?谢谢。


编辑:这是我到目前为止所做的:

假设 df 是我上面显示的数据框的名称:

array1 = np.zeros((1,16,2)) #creates an empty array
for i in range(0,16):
    if (df.iloc[i,1]==2): #selects only the data with time=2
        array1[:,i,:] = [df.iloc[i,2],df.iloc[i,3]]
    else:
        array1[:,i,:] = [np.nan,np.nan] #fills the rest with NaN values

array2 = np.zeros((1,16,2))
for i in range(0,16): 
    if (df.iloc[i,1]==3): #selects only the data with time=3
        array2[:,i,:] = [df.iloc[i,2],df.iloc[i,3]]
    else:
        array2[:,i,:] = [np.nan,np.nan] #fills the rest with NaN values

array2 = np.roll(array2,10,axis=1) #adjusts the position of the nan values

merged_arrays = np.vstack((array1,array2)) #the required final array, with shape (2,16,2)

我希望你能帮助我开发一种更直接、更清晰的方法来从数据框创建这个 3D 数组。

标签: pythonarrayspandasnumpypython-xarray

解决方案


推荐阅读