Skip to main content
 首页 » 编程设计

python之如何将复杂的字典导入 Pandas

2025年05月04日15小虾米

我从 XML 文件中提取了这些数据:

d = { 
    'test1': { 
        0: {'a': {'min': 1, 'mid': 12, 'max': 13}, 
            'b': {'min': 2, 'mid': 22, 'max': 23}}, 
        3: {'a': {'min': 3, 'mid': 32, 'max': 33}, 
            'b': {'min': 4, 'mid': 42, 'max': 43}}, 
        8: {'a': {'min': 5, 'mid': 52, 'max': 53}, 
            'b': {'min': 6, 'mid': 62, 'max': 63}},             
    }, 
    'test2': { 
        0: {'a': {'min': 9, 'mid': 12, 'max': 13}, 
            'b': {'min': 8, 'mid': 22, 'max': 23}}, 
        3: {'a': {'min': 7, 'mid': 32, 'max': 33}, 
            'b': {'min': 6, 'mid': 42, 'max': 43}}, 
        8: {'a': {'min': 5, 'mid': 52, 'max': 53}, 
            'b': {'min': 4, 'mid': 62, 'max': 63}},            
    }, 
} 

我导入它:

ds = pd.DataFrame.from_dict(d) 

我想命名我的列然后开始浏览我的数据。

列是:['Tests', 'Id', 'Item']

例如,我想获取所有测试、任何项目和任何 Id 的所有 mid 值。于是我天真地写道:

ds[:,:,:,'min']  

但是显然不行。

另外,我担心数据帧没有像它应该的那样表示。怎么做才能变成这样?

+-------+----+------+-----+-----+-----+ 
|       |    |      | min | mid | max | 
+-------+----+------+-----+-----+-----+ 
| Tests | Id | Item |     |     |     | 
+-------+----+------+-----+-----+-----+ 
|       | 0  |  a   |  1  | 12  | 13  | 
|       |    |  b   |  2  | 22  | 23  | 
+ test1 +----+------+-----+-----+-----+ 
|       | 1  |  a   |  3  | 32  | 33  | 
|       |    |  b   |  4  | 42  | 43  | 
+-------+----+------+-----+-----+-----+ 
|       | 0  |  a   |  9  | 12  | 13  | 
|       |    |  b   |  8  | 22  | 23  | 
+ test2 +----+------+-----+-----+-----+ 
|       | 1  |  a   |  7  | 32  | 33  | 
|       |    |  b   |  6  | 42  | 43  | 
+-------+----+------+-----+-----+-----+ 

请您参考如下方法:

你需要在读入它们之后用stack做一些手动转换(这可能很难一步完成,因为通常字典可以嵌套得尽可能深) :

(pd.DataFrame.from_dict(d, orient="index") 
   .stack().apply(pd.Series) 
   .stack().apply(pd.Series) 
   .rename_axis(("Tests", "Id", "Item")))