Python中的高维数据结构
High-dimensional data structure in Python
在python中存储和分析高维数据的最佳方式是什么?我喜欢 Pandas DataFrame 和 Panel,我可以轻松地操纵轴。现在我有一个数据的超立方体 (dim >=4)。我一直在考虑诸如面板字典、元组作为面板条目之类的东西。我想知道 Python 中是否有高亮度面板的东西。
2016 年 5 月 20 日更新:
非常感谢所有的答案。我已经尝试过 MultiIndex 和 xArray,但是我无法对它们中的任何一个发表评论。在我的问题中,我会尝试使用 ndarray,因为我发现标签不是必需的,我可以单独保存它。
2016 年 9 月 16 日更新:
最后我想到了使用MultiIndex。刚开始的时候操作起来有点棘手,不过现在有点习惯了。
如 in the docs and this SO answer 所述,MultiIndex
对于更高维度的数据最有用,因为它允许您在 DataFrame
环境中处理任意数量的维度。
除了 Panel
,还有 Panel4D - 目前处于试验阶段。鉴于 MultiIndex
的优点,我不建议使用此版本或三维版本。相比之下,我认为这些数据结构并没有获得太大的吸引力,而且确实会被淘汰。
如果您需要带标签的数组和类似 pandas 的智能索引,您可以使用 xarray
包,它本质上是 pandas 面板的 n 维扩展(面板正在被弃用在 pandas 将来支持 xarray)。
否则,有时使用任意维度的普通 numpy 数组可能是合理的;您还可以拥有任意维度的任意嵌套的 numpy 记录数组。
我建议继续使用 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中存储和分析高维数据的最佳方式是什么?我喜欢 Pandas DataFrame 和 Panel,我可以轻松地操纵轴。现在我有一个数据的超立方体 (dim >=4)。我一直在考虑诸如面板字典、元组作为面板条目之类的东西。我想知道 Python 中是否有高亮度面板的东西。
2016 年 5 月 20 日更新: 非常感谢所有的答案。我已经尝试过 MultiIndex 和 xArray,但是我无法对它们中的任何一个发表评论。在我的问题中,我会尝试使用 ndarray,因为我发现标签不是必需的,我可以单独保存它。
2016 年 9 月 16 日更新: 最后我想到了使用MultiIndex。刚开始的时候操作起来有点棘手,不过现在有点习惯了。
MultiIndex
对于更高维度的数据最有用,因为它允许您在 DataFrame
环境中处理任意数量的维度。
除了 Panel
,还有 Panel4D - 目前处于试验阶段。鉴于 MultiIndex
的优点,我不建议使用此版本或三维版本。相比之下,我认为这些数据结构并没有获得太大的吸引力,而且确实会被淘汰。
如果您需要带标签的数组和类似 pandas 的智能索引,您可以使用 xarray
包,它本质上是 pandas 面板的 n 维扩展(面板正在被弃用在 pandas 将来支持 xarray)。
否则,有时使用任意维度的普通 numpy 数组可能是合理的;您还可以拥有任意维度的任意嵌套的 numpy 记录数组。
我建议继续使用 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
这是数据的超立方体。您将获得更好的支持和问题服务,减少错误和许多其他好处。