pandasこの記事について今までなんとなくで使用していたpandasですが、なんとなくで実装していたコード(日経平均予想のやつです)が汚くメンテナンスが難しくなってきたので、一度ちゃんとpandasでのデータの扱い方をまとめておこうと思って書いたものです。いうものがあり、基本的にはそこで説明されていることの一部をピックアップして紹介している記事になります。1次元のデータSeriesの作り方Seriesは1次元のラベル付き配列です。要素はどんな型のデータでも入れることができます。日経平均(N225)、S&P500(GSPC)、DAX(GDAXI)という3つの株価指数の10月7日の終値は次のようなものでした。10490.860352このデータをSeriesで1次元の配列のように扱うには、次のようにSeriesを生成します。Notebookで中身を確認するとこんな感じのデータになってます。float64Seriesはnumpyのndarrayに似ているSeriesはnumpyのndarrayに似た扱いが可能です。このように添え字でアクセスできます。Pythonの配列のようなスライスも使えます。s[0]10490.860352こんなことをすると、中央値より大きな値を取り出す、なんてことも簡単にできます。float64numpyの関数はそのまま使えます。対数や指数を取りたいときも、こんな感じで一発です。float64SeriesはPythonの辞書に似ているSeriesは辞書にも似ています。辞書のように、ラベルを使って各要素にアクセスできます。キーの存在確認なんかもできます。float64スカラー値との掛け算も。float64Name属性Serieseには名前を付けることもできます。いう引数を渡してあげます。name='close')すると、次のようなSeriesが定義されます。float64このように、最初に定義した名前にアクセスすることもできます。s.name'close'名前を変えたいときはrenameメソッドを使います。2次元のデータDataFrameの作り方2次元のデータを扱うには、DataFrameを使用します。イメージとしてはエクセルのシートのようなものが扱えるイメージです。これは非常に有名なデータ構造なので、pandasを使っているブログ記事などで頻繁に目にします。DataFrameでは行のラベル(index)と列のラベル(columns)を設定することができます。10月7日の終値に加えて始値の情報も持ったDataFrameの例が次の画像になります。左側の縦に並んでいるラベル(=行ラベル)がindex、上側の横に並んでいるラベル(=列ラベル)がcolumnsで設定できるラベルです。このようなDataFrameを定義する方法は山ほどあるのですが、ここでは2つだけ紹介します。どちらの方法で定義しても上に示したDataFrameが作られます。'GDAXI'])実際にはCSVなどのデータを読み込んでDataFrameとして扱うことが多いかもしれません。その場合はread_csvという関数を使用します。openclose.csvという名前の次のようなCSVがあるとします。name,close,openN225,16860.089844,16883.119141GSPC,2153.739990,2164.189941GDAXI,10490.860352,10549.690430このとき、この1行でCSVを読み込んでDataFrameに変換できます。header=0)index_colで行ラベルとして使う列を、headerで列ラベルとして使う行番号をそれぞれ指定しています。headerはデフォルトで0となるので、省略しても構いません。列だけを処理したい場合は、次のように抜き出します。float64列の名前がPythonの変数名として有効なものであれば、メンバ変数のようにアクセスすることもできます。df.close列の追加もできます。始値)の列を追加したい場合は、次のようにして追加できます。df['open']私個人はあまり使ったことはないですが、列の削除はpopでできるみたいです。df.pop('delta')assign関数で新しい列を追加する先ほどの値動きの列deltaは、assignという関数を使っても追加することができます。df.assign(delta=df['close']-df['open'])df.assign()は戻り値に列の追加された新しいDataFrameを返しますが、元のdfには変更を加えません。このassign関数の優れているところは、関数も渡せるところです。x['open']])としてやると、deltaがプラスならUP、マイナスならDOWNという文字列を持つupdownという列を新しく追加できます。要素の選択こちらの表をそのまま引用します。DataFrame下記の状態のDataFrameを例にして、一つずつ見ていきます。始値(open)の列を取り出してみます。float64確かに戻り値はSeriesになっています。日経平均(=N225)の行だけを取り出してみます。行を選択するのに使うlocはlabel-locationに由来しているようです。float64こちらも結果がSeriesで得られました。次は0スタートで1番目の株価指数を取り出します。使用するilocは、integer-locationの略みたいです。float64こちらもS&P500(=GSPC)のデータがSeriesで取り出せました。行のスライスPythonのリストと同様に、スライスを使って行を取り出すこともできます。df[1:]とすると、1番目のGSPC以降の行がDataFrameとして取り出せます。True]という配列を次のように渡してあげます。Notebookでの出力画面のスクショを紹介していましたが、printやto_string()などの関数を使ってきれいにコンソールに出力することもできます。print(df)df.to_string()print関数での出力結果はこんな形。dataだった!実はpandasでは3次元を扱うデータ構造も提供しています。それがPanelです。data)がpandasの名前の由来にもなっているようです*1。minor_axisと呼ばれるようです。itemsという軸がDataFrameを持っており、major_axisとminor_axisがそのDataFrameの行(index)と列(columns)に対応します。今まで使用してきた例だと、10月7日の各株価指標の始値・終値をもったDataFrameを扱ってきました。他の日付の始値・終値も扱いたい、となった場合に、Panelが活躍します。itemsに日付、major_axisに株式指標、minor_axisに始値/終値をとるPanelを使えばいいわけです*2。})panelは3次元なので、printしても簡単に中を見れたりはしません。open他にも、3次元配列から初期化したりもできます。要素の操作Panelの操作はDataFrameによく似ています。このようにitemsを指定してDataFrameを取り出せます。panel['2016-10-06']DataFrameを行列のように見立てて、行列の計算なんかもできます。先ほど紹介した、panel[item]という形で取り出したDataFrameは、items軸に基づいて取り出したDataFrameでした。major_axisやminor_axisに基づいてDataFrameを取り出したい場合は、それぞれ次のようにします。major_axispanel.major_xs('N225')minor_axispanel.minor_xs('close')欲しいDataFrameが行と列が逆のものの場合は、.Tで転置を取って調節してください。panel.major_xs('N225').TDataFrameに変換to_frame()関数を使うと、PanelをDataFrameに変換することもできます。Notebookについて紹介しています。www.madopro.net*1:動物のパンダかと思ってた*2:itemsに日付が来るのはあまりよくない例かもしれません。本当は日付はmajor_axis置くのがいいのかも。アーカイブおすすめの本はてなブログをはじめよう!kanohkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。