如何将字典中包含的多维数组存储在python xarray中?

如何将字典中包含的多维数组存储在python xarray中?,python,pandas,numpy,multidimensional-array,xarray,Python,Pandas,Numpy,Multidimensional Array,Xarray,我有一本字典,里面有各种大小的数组。所有数组都有一个共同的轴长度(时间),我希望沿着该轴存储数据 例如: arr1 = np.random.rand(239, 1) arr2 = np.random.rand(239, 6) arr3 = np.random.rand(239, 3, 7) time = np.random.rand(239, 1) d = {'A': arr1, 'B': arr2, 'C': arr3, 'time': time} 我需要能够轻松地索引和操作数据,因此我的第

我有一本字典,里面有各种大小的数组。所有数组都有一个共同的轴长度(时间),我希望沿着该轴存储数据

例如:

arr1 = np.random.rand(239, 1)
arr2 = np.random.rand(239, 6)
arr3 = np.random.rand(239, 3, 7)
time = np.random.rand(239, 1)
d = {'A': arr1, 'B': arr2, 'C': arr3, 'time': time}
我需要能够轻松地索引和操作数据,因此我的第一个倾向是使用
pandas.Panel
来存储数据,但是,由于维度不一致,我一直没有成功


xarray.Dataset
是存储我的数据的正确方法吗?如果是,如何最好地实现它?

这里有一个使用标准方法的非常简单的方法。为了简洁和方便,我将数据缩小并放入数据帧中,但概念是一样的

dr=pd.date_range('1-1-2017', periods=4, freq='d')
df1=pd.DataFrame( np.random.randn(4),   columns=['x'],     index=dr)
df2=pd.DataFrame( np.random.randn(4,2), columns=['y','z'], index=dr)
因此
df1
df2
如下所示:

                   x
2017-01-01 -0.705449
2017-01-02 -0.597631
2017-01-03 -0.844197
2017-01-04 -1.063895
                   y         z
2017-01-01 -0.288822 -0.343934
2017-01-02  1.072678  1.776767
2017-01-03 -0.606593  0.192280
2017-01-04  0.019401  2.007770
df = df1.stack().append(df2.stack()).sort_index()
重新配置如下:

                   x
2017-01-01 -0.705449
2017-01-02 -0.597631
2017-01-03 -0.844197
2017-01-04 -1.063895
                   y         z
2017-01-01 -0.288822 -0.343934
2017-01-02  1.072678  1.776767
2017-01-03 -0.606593  0.192280
2017-01-04  0.019401  2.007770
df = df1.stack().append(df2.stack()).sort_index()

您甚至可以使用以下工具从此处转换为
xarray

df.to_xarray()
一些简要说明:

  • 不推荐使用Panel,支持使用Xarray或多索引。我采用了上面的多索引方法,但xarrays是另一个不错的选择
  • 有关数据组织的伟大理论,请参见Hadley Wickam对“整洁”数据的解释,您可以找到