如何将字典中包含的多维数组存储在 python xarray 中?
How do I store mutidimensional arrays contained in a dictionary in a python xarray?
我有一本字典,其中包含 numpy
个不同大小的数组。所有数组都有一个共同的轴长度(时间),我想沿着它存储数据。
例如:
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
是存储我的数据的正确方法吗?如果是,如何最好地实施?
这是一个使用标准 pandas 方法的非常简单的方法。为了简洁和方便,我将您的数据变小并放入数据框中,但概念是相同的。
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()
2017-01-01 x -0.705449
y -0.288822
z -0.343934
2017-01-02 x -0.597631
y 1.072678
z 1.776767
2017-01-03 x -0.844197
y -0.606593
z 0.192280
2017-01-04 x -1.063895
y 0.019401
z 2.007770
您甚至可以通过以下方式从这里转换为 xarray
:
df.to_xarray()
一些快速笔记:
- Panel 已弃用,取而代之的是 xarrays 或多索引。我采用了上面的多索引方法,但 xarrays 是另一个不错的选择
- 有关数据组织的重要理论,请参阅 Hadley Wickam 对 "tidy" 数据的解释,您可以在其中找到 here。
我有一本字典,其中包含 numpy
个不同大小的数组。所有数组都有一个共同的轴长度(时间),我想沿着它存储数据。
例如:
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
是存储我的数据的正确方法吗?如果是,如何最好地实施?
这是一个使用标准 pandas 方法的非常简单的方法。为了简洁和方便,我将您的数据变小并放入数据框中,但概念是相同的。
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()
2017-01-01 x -0.705449
y -0.288822
z -0.343934
2017-01-02 x -0.597631
y 1.072678
z 1.776767
2017-01-03 x -0.844197
y -0.606593
z 0.192280
2017-01-04 x -1.063895
y 0.019401
z 2.007770
您甚至可以通过以下方式从这里转换为 xarray
:
df.to_xarray()
一些快速笔记:
- Panel 已弃用,取而代之的是 xarrays 或多索引。我采用了上面的多索引方法,但 xarrays 是另一个不错的选择
- 有关数据组织的重要理论,请参阅 Hadley Wickam 对 "tidy" 数据的解释,您可以在其中找到 here。