假设我们从
import numpy as np
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
如何有效地将其转换为pandas DataFrame
import pandas as pd
>>> pd.DataFrame({'a': [0, 0, 1, 1], 'b': [1, 3, 5, 7], 'c': [2, 4, 6, 8]})
a b c
0 0 1 2
1 0 3 4
2 1 5 6
3 1 7 8
我们的想法是让a
列在原始数组的第一个维度上有索引,其余列是原始数组中后两个维度上的2d数组的垂直串联。
(This很容易使用循环;问题是没有它们怎么办。)
较长示例
使用@Divakar的优秀建议:
>>> np.random.randint(0,9,(4,3,2))
array([[[0, 6],
[6, 4],
[3, 4]],
[[5, 1],
[1, 3],
[6, 4]],
[[8, 0],
[2, 3],
[3, 1]],
[[2, 2],
[0, 0],
[6, 3]]])
应该做成类似于:
>>> pd.DataFrame({
'a': [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],
'b': [0, 6, 3, 5, 1, 6, 8, 2, 3, 2, 0, 6],
'c': [6, 4, 4, 1, 3, 4, 0, 3, 1, 2, 0, 3]})
a b c
0 0 0 6
1 0 6 4
2 0 3 4
3 1 5 1
4 1 1 3
5 1 6 4
6 2 8 0
7 2 2 3
8 2 3 1
9 3 2 2
10 3 0 0
11 3 6 3
3条答案
按热度按时间xwbd5t1u1#
这里有一种方法,它在NumPy上完成大部分处理,然后最终将其作为DataFrame输出,就像这样-
如果您确切地知道列数为
2
,那么我们将以b
和c
作为最后两列,以a
作为第一列,您可以添加列名称,如下所示-样品运行-
s71maibg2#
使用
Panel
:则
a
为:b
是:并且
c
是:mw3dktmi3#
这是一个不带面板的纯Pandas解决方案。
要使用MultiIndex获取 Dataframe ,请使用
pd.concat
:要将其转换为问题中提供的非MultiIndex形式,请执行以下操作: