Python中的高维数据结构

6
什么是在Python中存储和分析高维数据的最佳方法?我喜欢Pandas DataFrame和Panel,因为我可以轻松地操作它们的轴。现在我有一个超立方体(dim>=4)的数据。我一直在考虑像dict of Panels和tuple as panel entries之类的东西。我想知道Python中是否有高维面板。
更新20/05/16: 非常感谢所有的答案。我已经尝试了MultiIndex和xArray,不过我无法对它们进行评论。在我的问题中,我将尝试使用ndarray,因为我发现标签并不重要,我可以将其单独保存。
更新16/09/16: 最终我使用了MultiIndex。一开始操作的方式有些棘手,但现在我已经习惯了。

np.ndarray是pandas DataFrame的基础类型,但它支持超过两个维度:http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.ndarray.html - hilberts_drinking_problem
由于Pandas在MultiIndexing方面有了很大的改进,因此通常更喜欢使用它而不是Panels。 - Alexander
3个回答

5
MultiIndex最适用于高维数据,如文档中所述(链接1)此SO答案,因为它允许您在DataFrame环境中处理任意数量的维度。

除了Panel之外,还有Panel4D - 目前处于实验阶段。鉴于MultiIndex的优势,我不建议使用四维面板或三维版本。我认为相比之下这些数据结构并没有得到很多关注,实际上将被淘汰。


面板和多维面板将在未来版本中被弃用,取而代之的是 xarray:http://pandas.pydata.org/pandas-docs/version/0.18.0/whatsnew.html#to-xarray - aldanor

3
如果您需要带标签的数组和类似于pandas智能索引,您可以使用xarray包,它本质上是pandas Panel的n维扩展(在未来,面板将被弃用,取而代之的是xarray)。
否则,有时使用普通的numpy数组可能是合理的,它可以是任意维度; 您还可以具有任意维度的任意嵌套numpy记录数组。

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

这是一个数据的超立方体。如果有支持和问题少一些错误和许多其他好处,你将得到更好的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接