2013-05-12 16 views
6

私は各セルに単純な辞書を格納しているpandasデータフレームを構築しました。たとえば:Python、辞書をデータフレーム内に格納

{'Sales':0,'Revenue':0} 

私は経由してデータフレームから特定の値を取得することができます。

df[columnA][index100]['Revenue'] 

しかし、今、私はcolumnA内の辞書からすべての収益値のグラフをプロットしたいのですが - 何これを達成する最良の方法は?

辞書を削除して同じサイズの2つのデータフレームを使用すると、人生は長期的に楽になりますか? (ベストプラクティスが不明なパンダにとっては非常に新しいものです)。

+0

更新:最後に、私は完全に機能し続けている階層的なインデックスを使いました。 – Sylvansight

答えて

7

列Aからすべての収益値を取得する簡単な方法はdf[columnA].map(lambda v: v['Revenue'])です。

あなたのしていることによっては、あなたの構造を少し微調整すれば人生は本当に簡単かもしれません。たとえば、 "Sales"と "Revenue"の階層インデックスをキーとして1つのレベルで使用できます。

+0

ありがとうございます - それは大いに役立ちます – Sylvansight

3

多くのユースケースでは、DataFrameに辞書を格納することはお勧めできません。
言及する価値のある別のデータ構造は、Panelです。

は、あなたが(ほぼ一貫キーで)何かの辞書のデータフレームがあるとします。

In [11]: df = pd.DataFrame([[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}], [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}]], columns=list('AB')) 

In [12]: df 
Out[12]: 
        A     B 
0 {'a': 1, 'b': 2} {'a': 3, 'b': 4} 
1 {'a': 5, 'b': 6} {'a': 7, 'b': 8} 

あなたがパネルを作成することができます(これを構築することが好ましい/より直接的な方法があります注意してください!):

In [13]: wp = pd.Panel({'A': df['A'].apply(pd.Series), 'B': df['B'].apply(pd.Series)}) 

In [14]: wp 
Out[14]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 2 (items) x 2 (major_axis) x 2 (minor_axis) 
Items axis: A to B 
Major_axis axis: 0 to 1 
Minor_axis axis: a to b 

セクションは例のために、様々な方法でデータフレームのように効率的にアクセスすることができる。

In [15]: wp.A 
Out[15]: 
    a b 
0 1 2 
1 5 6 

In [16]: wp.minor_xs('a') 
Out[16]: 
    A B 
0 1 3 
1 5 7 

In [17]: wp.major_xs(0) 
Out[17]: 
    A B 
a 1 3 
b 2 4 

ですから、すべてのパンダのデータフレームwhizzinessを行うことができます。

In [18]: wp.A.plot() # easy! 
Out[18]: <matplotlib.axes.AxesSubplot at 0x1048342d0> 

("experimental") higher dimensional Panelsもあります。

+0

N-D実験から何が出てくるのか興味があります。さまざまな種類の軸を使用してデータ処理に使用する私たちの自家製のn-dimオブジェクトがあり、フラットなデータフレームとハイパーキューブを頻繁に移動します。 – DSM

+0

ありがとうございます - 私はこれと同様に、@ BrenBarnによって以前に言及された階層インデックスを試してみます – Sylvansight

+0

@Sylvansightはおそらくto_panelメソッド経由でパネルに移動できる階層インデックス付きDataFrameから注目に値するでしょう:) –

関連する問題