2017-03-03 68 views
2

我正在阅读np.fromfile的二进制文件,我想将其转换为DataFrame。二进制文件的格式是这样的:如何使用自定义numpy dtype的MultiIndex创建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) 

现在,我要变成一个数据帧,所以我尝试这样做:

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 

回答

0

我认为它没有实现嵌套结构化数组。你的情况,你可以 破坏这样的D型:

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