如何使用自定义numpy dtype中的MultiIndex创建DataFrame?

时间:2017-03-03 16:03:22

标签: python pandas numpy

我正在阅读包含np.fromfile的二进制文件,我想将其转换为DataFrame。二进制文件的格式如下:

import numpy as np
import pandas as pd

dtyp = np.dtype([
    ('group1', [('item1', 'int'), ('item2', 'int')]),
    ('group2', [('item1', 'int'), ('item2', 'int')])
    ])

arr = np.zeros(shape=2, dtype=dtyp)

现在,我想把它变成一个DataFrame,所以我尝试了这个:

pd.DataFrame.from_records(arr)

   group1  group2
0  (0, 0)  (0, 0)
1  (0, 0)  (0, 0)

......但这不是我想要的。列名'item1''item2'将丢失。我想要的输出在列上有MultiIndex,如下所示:

  group1       group2      
   item1 item2  item1 item2
0      0     0      0     0
1      0     0      0     0

1 个答案:

答案 0 :(得分:0)

我认为它没有针对嵌套结构化数组实现。在你的情况下,你可以 像这样破坏dtype:

def mkd(arr):
    d={}
    for n1 in arr.dtype.names:
        for n2 in arr[n1].dtype.names:
                d[(n1,n2)]=arr[n1][n2]
    return pd.DataFrame(d) 

有关

In [1]:   mkd(arr)
Out[1]: 
  group1       group2      
   item1 item2  item1 item2
0      0     0      0     0
1      0     0      0     0
2      0     0      0     0