pythonには、Seriesというデータ構造とDataFrameというデータ構造があります。
データ分析において、これらのデータ構造に関する扱いを理解しておくことは必須ですので、簡単に入門記事を書いておこうと思います。
目次
スポンサーリンク
pandas
pandasはデータ分析に便利なデータ構造と、簡単に分析が行えるツールを備えています。
Rユーザーであればデータフレームは馴染み深いとは思いますが、pythonではpandasを入れないとデータフレームは使えません。
ということでpandasを読み込みましょう。
import pandas as pd
慣例に従い、pdという名前で読み込みます。
Seriesの利用
pandasではシリーズというデータ構造を使うことができます。
In : seq0=pd.Series([1,2,3]) print(seq0) Out : 0 1 1 2 2 3 dtype: int64
リスト[1,2,3]を入力したはずなのに、一番左の列には0,1,2という値が入っています。
これはインデックスです。Seriesと普通の数字の列との大きな違いはこのインデックスにあります。
例えばインデックス0の値1を取り出したければ次のように入力することで取り出すことができます。
In : seq0[0] Out : 1
値の入っている列だけを取り出したい場合はvalues,インデックスを取り出したい場合はindexで取り出せます。
取り出された値はnumpyのndarrayで取り出されます。
In : seq0.values Out : array([1, 2, 3]) In : seq0.index Out : RangeIndex(start=0, stop=3, step=1)
インデックスが0,1,...だと正直リストとの違いがあまりわからないので、インデックスを指定してSeriesを出力してみましょう。
In : seq1=pd.Series([1,2,3],index=["a","c","b"]) print(seq1) Out : a 1 c 2 b 3 dtype: int64
インデックスがa,c,bに変わりました。
発想としては辞書型に似ていますね。ちなみに辞書型もSeriesに変換できます。
In : seq2 = pd.Series({"a":1,"b":2}) print(seq2) Out : a 1 b 2 dtype: int64
インデックスの列を変更することも当然できて
In : seq0.index = ["q","w","e",] print(seq0) Out : q 1 w 2 e 3 dtype: int64
Seriesを扱うメソッド
インデックスを使って並び変えたい!と思った場合、reindexで並べなおすことができます。
存在しないインデックスの場所にはデフォルトではNaNが入ります。fill_valueで変更することもできます。
In : seq0.reindex(["q","e","w","d"]) Out : q 1.0 e 3.0 w 2.0 d NaN dtype: float64
DataFrameの利用
Seriesを行列のような形に拡張して、行だけではなく列にも名前をつけたい場合があると思います。
そのような場合に利用するのがデータフレームです。Seriesと同様、辞書型から作成してみます。
In : DF1 = pd.DataFrame({"a":[1,2,3,4],"b":[5,4,3,2]}) print(DF1) Out : a b 0 1 5 1 2 4 2 3 3 3 4 2
列に名前がつきました。Rユーザーであれば、馴染深い形になってきましたね。
値の取り出し方ですが、まず列を指定する場合は簡単で、次のように行います。
In : DF1[["a","b"]] Out : a b 0 1 5 1 2 4 2 3 3 3 4 2 In : DF1["b"] Out : b 0 5 1 4 2 3 3 2 In : DF1["b"][0] Out : 5
行のみを指定する場合は、スライスします。
In : DF1[0:2] Out : a b 0 1 5 1 2 4
こんなこともできます
In : DF1[DF1>3]=100 Out : a b 0 1 100 1 2 100 2 3 3 3 100 2