2017-03-28 1 views
1

私はXMLファイルから抽出されたこのデータを持っている:複雑なdictをpandasにインポートするには?

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'] 

しかし、明らかにそれは動作しません。

また、私はデータフレームが想定されているように表現されていないのではないかと心配しています。このようにするにはどうすればいいですか?

あなたは(一般的に辞書が深いことができるように入れ子にすることができるので、1つのステップで行われ得ることは困難かもしれない)でそれらを読んだ後 stackでいくつかの手動変換を行う必要があり
+-------+----+------+-----+-----+-----+ 
|  | |  | 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 | 
+-------+----+------+-----+-----+-----+ 

答えて

7

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

enter image description here

+0

私は '.rename_axis'のためのエラーを取得する:タプルオブジェクトを呼び出すことはできません。それは普通ですか? – nowox

+0

これは正常ではありません。括弧が間違っているかもしれませんか?サンプルデータには問題ありません。 – Psidom

+0

あなたはこれを見ることができますか? https://gist.github.com/nowox/1d0165221ac17a6de071f51c5428b599 – nowox

関連する問題