2017-01-10 5 views
1

複数の辞書からpandasデータフレームを作成しようとしています。辞書のそれぞれは、以下のフォームにあります。forループ内のPandas Dataframeにデータを追加

{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}

{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}

最終的に私が欲しいもの(この後、私はいくつかのデータ変換を行うためにパンダを使用するには、このようになります。データフレームを計画され、出力タブ区切りファイルへのデータフレーム):

 DrPepper Pepsi 
Miami 5  8 
Atlanta 10  25 

答えて

2

追加のライブラリを使用して気にしない場合は、使用することができますtoolz.mergeを使用してすべての辞書を結合し、続いてDataFrame.from_dict

import toolz 

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}} 
d2 = {'Atlanta': {'DrPepper': '10', 'Pepsi': '25'}} 

df = pd.DataFrame.from_dict(toolz.merge(d1, d2), orient='index') 

この方法では、繰り返しインデックス値(都市名など)がないことが前提です。そうすると、リピートは辞書のリストの最後のものを優先して上書きされます。

結果の出力:

 DrPepper Pepsi 
Atlanta  10 25 
Miami   5  8 
+0

再び、あなたは私の途方もなく有益な何かを教えてきました。 – piRSquared

+1

@ piRSquared:ありがとう、私は['toolz'](http://toolz.readthedocs.io/en/latest/index.html)ライブラリには、たくさんの便利な小さな関数が含まれていることがわかりました。あなたが楽しむパッケージのようです。また、 '' cytoolz'(https://github.com/pytoolz/cytoolz)があります。これは、性能向上のための 'toolz'のcython実装です。 – root

+0

私はtoolzライブラリについて聞いたことがありません。 – Elle

2

あなたはでdictから作成concatDataFramesを使用することができます:Tによってtranspose

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}} 
d2 = {'Atlanta':{'DrPepper':'10','Pepsi':'25'}} 

print (pd.DataFrame.from_dict(d1, orient='index')) 
     Pepsi DrPepper 
Miami  8  5 

print (pd.concat([pd.DataFrame.from_dict(d1, orient='index'), 
        pd.DataFrame.from_dict(d2, orient='index')])) 
     Pepsi DrPepper 
Miami  8  5 
Atlanta 25  10 

別の解決策を:

print (pd.DataFrame(d1)) 
     Miami 
DrPepper  5 
Pepsi  8 

print (pd.concat([pd.DataFrame(d1).T, pd.DataFrame(d2).T])) 
     DrPepper Pepsi 
Miami   5  8 
Atlanta  10 25 

も可能使用list comprehensionです:

L = [d1,d2] 
print (pd.concat([pd.DataFrame(d).T for d in L])) 
     DrPepper Pepsi 
Miami   5  8 
Atlanta  10 25 
関連する問題