pandasのデータフレームに手間取った
pandas+matplotlibで3D棒グラフを作る - HPCメモ
このページを参考にして、matplotlibによる3Dグラフのことを書こうと思っていましたが、pandasのデータフレームの取り扱いに四苦八苦したので、そのことについて書きます。
3d棒グラフを書くために、4x3のデータフレームを作ろうと思いました。
import pandas as pd df=pd.DataFrame( {u"しりとり":[580, 420, 520], u"りんご":[280, 260, 300], u"ごりら":[300, 320, 280], u"らっぱ":[30, 32, 10]}, index=(u"A", u"B", u"C")) print(df)
ごりら しりとり らっぱ りんご A 300 580 30 280 B 320 420 32 260 C 280 520 10 300
列の名前がソートされてしまいました。
リストを辞書型にしてひもつけているので、こういう結果になるようです。
ソートされると、グラフ作成のときに要素がちゃんと設定されないので、書いた順番に列名を並べる必要があります。
ならば、辞書型にしているのをリストに直して、後から行と列の名前を入れてみればいいと思いつきました。
df=pd.DataFrame( [[580, 420, 520], [280, 260, 300], [300, 320, 280], [30, 32, 10]]) df.index=(u"A", u"B", u"C") df.columns=(u"しりとり",u"りんご",u"ごりら",u"らっぱ") print(df)
ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements
要素の数がおかしいとエラー。
どうやら、2重リストのときは行と列が逆になるようです。
df=pd.DataFrame( [[580,280,300,30], [420,260,320,32], [520,300,280,10]]) df.index=(u"A", u"B", u"C") df.columns=(u"しりとり",u"りんご",u"ごりら",u"らっぱ") print(df)
しりとり りんご ごりら らっぱ A 580 280 300 30 B 420 260 320 32 C 520 300 280 10
これで望んでいた形のデータフレームを作成することができました。