Python中的高维数据结构

Posted

技术标签:

【中文标题】Python中的高维数据结构【英文标题】:High-dimensional data structure in Python 【发布时间】:2016-09-15 15:41:13 【问题描述】:

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

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

16 年 9 月 16 日更新: 最后我想出了使用 MultiIndex 。操作它的方法一开始相当棘手,但我现在有点习惯了。

【问题讨论】:

np.ndarray 是 pandas DataFrame 的底层类型,但它支持两个以上的维度:docs.scipy.org/doc/numpy-1.10.0/reference/generated/… 由于 Pandas 极大地改进了 MultiIndexing,因此通常更喜欢使用它来代替 Panels。 【参考方案1】:

MultiIndex 对于更高维度的数据最有用,正如 in the docs 和 this SO answer 所解释的那样,因为它允许您在 DataFrame 环境中处理任意数量的维度。

除了Panel,还有Panel4D——目前处于实验阶段。鉴于MultiIndex 的优势,我不建议使用此版本或三维版本。相比之下,我认为这些数据结构并没有太大的吸引力,而且确实会被淘汰。

【讨论】:

面板和多维面板在未来的版本中将被弃用,取而代之的是xarray:pandas.pydata.org/pandas-docs/version/0.18.0/…【参考方案2】:

如果您需要带标签的数组和类似 pandas 的智能索引,您可以使用 xarray 包,它本质上是 pandas 面板的 n 维扩展(面板将在未来在 pandas 中被弃用,取而代之的是 xarray)。

否则,有时使用可以是任何维度的普通 numpy 数组可能是合理的;您还可以拥有任意嵌套的任意维度的 numpy 记录数组。

【讨论】:

【参考方案3】:

我建议继续使用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

这是一个超立方体数据。支持和问题以及更少的错误和许多其他好处将为您提供更好的服务。

【讨论】:

以上是关于Python中的高维数据结构的主要内容,如果未能解决你的问题,请参考以下文章

基于HDF5的高维数据有效

在 matplotlib/python 中可视化高维数据

Python数据分析pandas之多层高维索引

Python使用tsne进行高维数据可视化实战:二维可视化三维可视化

R 与 MATLAB 中的高维数据结构化方法

高维数据中的最近邻?