亀の歩み

備忘録として

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

これで望んでいた形のデータフレームを作成することができました。