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中的高维数据结构的主要内容,如果未能解决你的问题,请参考以下文章