【问题标题】:How do I store mutidimensional arrays contained in a dictionary in a python xarray?如何在 python xarray 中存储字典中包含的多维数组?
【发布时间】:2017-11-09 20:39:01
【问题描述】:

我有一本字典,其中包含不同大小的 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 是在这里存储我的数据的正确方法吗?如果是,如何最好地实施?

【问题讨论】:

    标签: python pandas numpy multidimensional-array xarray


    【解决方案1】:

    这是一个使用标准 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()
    

    一些快速说明:

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

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2018-05-19
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多