pandas入り口まとめ
何度も躓いているので、とりあえず流れというか入門用の入り口を自分用にまとめておきます。
Series
一次元のデータというけど、ラベルも付けられるからn行2列の二次元データだと思うんだよね。
s = pd.Series( { 'hoge' : 123.456, 'huga' : 3455.23, 'piyo' : 5000.88 } )
とpandasのメソッド(!)で「s」というSeriesを作成する。 辞書から作るほうが視覚的に分かりやすいかな。
medianやlogもSeriesで使える…けど、ちょっと使い方に注意。
s.median()
だけど、logはnumpyを使うからnp.log(s)
と渡す。メソッドと引数渡し、紛らわしいね…。
SeriesにはName属性で名前をつけることが出来る。…はい。
DataFrame
こちらはn行n列の表として分かりやすいデータ形式。
行はindex、列はcolumnsのラベルを持つ。時系列の複数データなど得意。
手動でデータを作ることはそう無いと思う。普通はCSVなどで読み込むでしょう。なのでread_csvという便利なメソッドが!
df = pd.read_csv( './csv_data.csv', index_col = 'name', header = 0)
列ラベルとして使う行をheaderで指定、行ラベルとして使う列をindex_colで指定…。(だけど、index_colはheader行をチェックするんだよね?最終行でもいいのかな。) index_colで文字列で指定できるのは便利。csv中のカンマの数を数えなくていいし。
特定の列を指定する際にメンバ変数のようにアクセスすることも可能。
df.hoge
なので、列は固有データで行を時系列などにしたほうが操作しやすいDataFrameになるかな。
loc
を使ったほうが安全という話もあり。プロパティによるアクセスはオブジェクト自体のメソッド名と衝突したときに危険。
列の追加、削除
DataFrame.assign
メソッドで列を追加したメソッドを生成することもかんたんに。 df.assign(delta=df['hoge']-df['huga'])
など列を指定しつつ演算して、列を追加した新しいDataFrameを返してくるので名前をつけていきましょう。(「delta」は追加する列のラベルで任意)
削除は行も列もDataFrame.drop()
メソッドで。引数にaxis = 1
を指定すると列の削除に。例df.drop('hoge', axis = 1)
(hoge列を削除したDataFrameを返してくる)
データのファイル出力
read_csvがあるなら出力もあるだろうと。はいDataFrame.to_csv()
が。引数でカンマ区切りから変更することが出来るけど、csvなら変える必要ない。例df.to_csv("sample.csv")
Panel
三次元データ!ここはしっかりデータ形式を考えてからいじりださないと、場当たり的に作っていくとカオスになりそう。
軸の名前はそれぞれ
- items
- major_axis
- minor_axis
itemsがz軸でmajor_axisとminor_axisがx,y軸でDataFrameを作っているような感じ。
ここは実際のデータを入れてみないとなんとも。
panel.major_axis('hoge')
の行と列が欲しいものと違うという時は.Tで転置でpanel.major_axis('hoge').T
などという表記も使える。
時系列データの処理
今後、時系列データの処理について色々と調べていきたいと思います。
あ、さっそく…。
statsmodels.apiと。メモメモ。