【发布时间】:2016-05-05 00:36:46
【问题描述】:
问题
有没有一种好方法可以将具有 n 级索引的 DataFrame 转换为 n-D Numpy 数组(又名 n-张量)?
示例
假设我设置了一个类似的 DataFrame
from pandas import DataFrame, MultiIndex
index = range(2), range(3)
value = range(2 * 3)
frame = DataFrame(value, columns=['value'],
index=MultiIndex.from_product(index)).drop((1, 0))
print frame
哪个输出
value
0 0 0
1 1
2 3
1 1 5
2 6
该索引是一个 2 级分层索引。我可以使用
从数据中提取一个二维 Numpy 数组print frame.unstack().values
哪个输出
[[ 0. 1. 2.]
[ nan 4. 5.]]
这如何推广到 n 级索引?
玩unstack(),好像只能用来按摩DataFrame的二维形状,不能加轴。
我不能使用例如frame.values.reshape(x, y, z),因为这将要求框架包含准确的 x * y * z 行,这是无法保证的。这就是我在上面的例子中通过drop()ing 一行来试图证明的。
非常感谢任何建议。
【问题讨论】:
-
“它是如何概括的”的答案是它没有。 pandas DataFrame 本质上是一个二维对象。正如您的示例所示,它不会在索引“维度”中强制执行相同的大小,因此如果您尝试将其扩展到更多维度,则可能存在差距。我认为,如果您想获得一个 n-D 数组,您可能必须自己通过迭代索引级别并为每个索引级别创建一个单独的结果数组“切片”来制作它。 Pandas 并不针对这种结构。
-
谢谢@Bren。我设法解决了丢失行的问题并使用了
reshape()(见下文)。这似乎适用于我的数据集,尽管如果出现阻塞的情况我不会感到惊讶。
标签: python pandas multidimensional-array multi-index