我从 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")))
我是一名优秀的程序员,十分优秀!