2016-12-01 18 views
2

純粋にパンダの方法でフォローする方法はありますか、それとも辞書自体を最初に並べ替えるのが実際にはより合理的ですか?リストの辞書からのデータフレーム

初期辞書:

​​

そして、私は、列名が辞書のキーを入れ子にすることでしょうデータフレームを取得したいと思います:

aa bb cc alpha beta gamma 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

はしよう:

aaa = pd.DataFrame(data_json) 
foo = lambda x: pd.Series([i for i in x.items()]) 
bbb=pd.concat([aaa['a'].apply(foo),aaa['b'].apply(foo)],axis=1) 

を与えます私

0 1 2  0 1  2 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

しかし、今のカラム名が重複しているので、私は[0,1,2,0,1,2]こだわっていると私は私にはない言ったように私はちょうど

bbb.rename(columns={0:'a',1:'b',...}) 

を使用することはできません最初の辞書を並べ替えることを心がけてください。しかし、私はすべてをできるだけきれいにしたいと思います。

+0

気にしますか? –

+0

確かに、それを正しくフォーマットする方法はわかりませんが、 – kakk11

+0

あなたが持っている方法は問題ありません。だから、基本的にあなたはもう "a"や "b"を気にしませんが、値リストの項目のもう一方は重要です。 –

答えて

2

私は別に「a」と「b」の両方をロードし、それらを結合するでしょう(インデックスにそれらをマージ):

pd.DataFrame(data_json['a']).join(pd.DataFrame(data_json['b'])) 


    aa bb cc alpha beta gamma 
0 1 2 3  23 22  24 
1 2 2 3  26 25  24 
2 3 2 3  34 35  36 

どのように多くのあなたが知っていない場合はループを備えた別の方法data_json.keys()を持っていれば、pd.concatを使用すると便利です。私はconcatを使用する

list_df = [] 
for k in sorted(data_json): 
    list_df.append(pd.DataFrame(data_json[k])) 
pd.concat(list_df, axis=1) 
+1

ありがとう、それはうまくいきます。 – kakk11

2

:私はabする前に、私は得ることができます sorted(data_json)を使用していますので注意してください。注意:

In [11]: pd.DataFrame(data_json['a']) 
Out[11]: 
    aa bb cc 
0 1 2 3 
1 2 2 3 
2 3 2 3 

In [12]: pd.DataFrame(data_json['b']) 
Out[12]: 
    alpha beta gamma 
0  23 22  24 
1  26 25  24 
2  34 35  36 

だから単に:あなたがしてください期待している出力データフレームを追加

In [13]: pd.concat((pd.DataFrame(v) for v in data_json.values()), axis=1) 
Out[13]: 
    alpha beta gamma aa bb cc 
0  23 22  24 1 2 3 
1  26 25  24 2 2 3 
2  34 35  36 3 2 3 

In [14]: 
+0

もっと一般的な解決策をありがとう。 – kakk11

関連する問題