Python中的高维数据结构

时间:2016-05-18 23:33:46

标签: python numpy pandas machine-learning multi-index

在python中存储和分析高维日期的最佳方法是什么?我喜欢Pandas DataFrame和Panel,我可以轻松操控轴。现在我有一个超立方体(dim> = 4)的数据。我一直在想像Panels的dict,作为面板条目的元组。我想知道Python中是否存在高度暗淡的面板。

更新20/05/16: 非常感谢所有答案。我已经尝试过MultiIndex和xArray,但是我无法评论它们中的任何一个。在我的问题中,我将尝试使用ndarray,因为我发现标签不是必需的,我可以单独保存。

更新16/09/16: 我最终想到使用MultiIndex。一开始操纵它的方法非常棘手,但我现在已经习惯了。

3 个答案:

答案 0 :(得分:5)

MultiIndex对于更高维度数据最有用,如in the docsthis SO answer所述,因为它允许您在DataFrame环境中使用任意数量的维度。

Panel外,还有Panel4D - 目前处于试验阶段。鉴于MultiIndex的优点,我不建议使用这个或三维版本。我不认为这些数据结构相比之下已经获得了很大的吸引力,并且确实会被逐步淘汰。

答案 1 :(得分:3)

如果您需要带标签的数组和类似熊猫的智能索引,您可以使用xarray包,这实际上是pandas Panel的n维扩展(面板在将来的pandas中被弃用,有利于xarray)。

否则,使用可以具有任何维度的普通numpy数组有时是合理的;你也可以随意嵌套任意维度的numpy记录数组。

答案 2 :(得分:1)

我建议继续使用DataFrame,但使用MultiIndex功能。 DataFrame得到更好的支持,您可以使用MultiIndex保留所有维度。

实施例

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=['A', 'B'])

df3 = pd.concat([df for _ in [0, 1]], keys=['one', 'two'])

df4 = pd.concat([df3 for _ in [0, 1]], axis=1, keys=['One', 'Two'])

print df4

看起来像:

      One    Two   
        a  b   a  b
one A   1  2   1  2
    B   3  4   3  4
two A   1  2   1  2
    B   3  4   3  4

这是一个超多维数据集。而且你会得到更好的支持和问题,更少的错误和许多其他好处。