▶ データ分析を基本から学びたい場合は、以下の記事をご覧ください。
▶ pandasのデータ構造を基本から学びたい場合は、以下の記事をご覧ください。
はじめに
今回はpandasのデータ構造であるSeriesとDataFrameのデータ選択方法を基本から解説します。これもいくつかの方法があるため、はじめの理解があやふやだと後で混乱してしまうでしょう。SeriesとDataFrameに分けて、順に整理していきましょう。
Seriesのデータ選択
辞書のイメージで
Seriesのデータん選択でまずご紹介するのは、辞書のイメージでの選択です。Seriesは見出し(index)を持っているので、この見出しによるデータ選択ができます。早速、例をみてみましょう。
# dataとindexと低地
data=[10,2,5,6,2]
index=['a','b','c','d','e']
# Seriesを作成
sample_series=pd.Series(data,index=index)
sample_series
a 10
b 2
c 5
d 6
e 2
dtype: int64
aに10, bに2が対応していると考えると、indexがキーとなって、そのキーに値が対応している辞書のようだといえます。このSeriesで、見出しを使ってデータ選択をするには、辞書型と同じように角括弧[ ] でindexを指定します。
sample_series['d']
6
indexの’d’に対応するのは6ですね。indexが文字列ではない場合も見ておきましょう。
sample_series2=pd.Series(data)
sample_series2
0 10
1 2
2 5
3 6
4 2
dtype: int64
この場合で先ほどと同じデータを選択するには次のようにします。
sample_series2[3]
辞書型のイメージなので、indexを指定せずに自動的に振られた数字のindexでも同じように、角括弧[ ]の中にindexを指定するだけです。文字列の場合は’d’のように「’ 」でindexの文字列を囲みましたが、数字のindexの場合は「’ 」では囲みません。簡単ですね!
一次元の配列と同じように
次に「スライス」「マスク」「ファンシーインデックス」を説明します。これも初めに注意点を確認しておけばそんなに難しくありません。まずは、スライスからみていきましょう。
スライス
スライスは配列の一部を指定して切り取るものです。角括弧を使用して、「:」(コロン)を使用したスライス表記で記述します。スライス表記の基本は以下となります。aはSeriesが入った変数とします。
a[start : stop : step]
ここでstart, stop, stepにはdefault値が設定されていて、start=0, stop=Seriesのsize,step=1となります。指定が省略された場合は、このdefault値が採用されます。またstepを省略するときには直前の「:」も省略することもできます。次の形となります。
a[start : stop]
始点と終点だけとなるのでだいぶわかりやすいですね。では、確認していきましょう。今回もsample_seriesを使います。一応、中身を見ておきましょう。
sample_series
a 10
b 2
c 5
d 6
e 2
dtype: int64
見出しにa, b, ,..というアルファベットがついたデータです。ここでスライスを使ってみましょう。
ssample_series['b':'d']
b 2
c 5
d 6
わかりますか?もともとa, b, c, d, e, のラベルが付いていたデータから、b, c, d、のラベルがついたデータが選択されています。このようにスライスは配列から、一部の配列を切り出します。コロンの前後のラベルで挟まれた配列が切りだされていますが、見出し(index)が文字列の場合は「コロンの前に指定したもの」は含み、「コロンの後にしてたもの」も含みます。
もうひとつ見てみましょう。今度はsample_series2を使います。一応、中身をみておきましょう。
sample_series2
0 10
1 2
2 5
3 6
4 2
dtype: int64
こちらは見出しが文字列ではなく、数字になっていますね。この場合のスライスの動作も確認しておきましょう。
sample_series2[1:3]
この結果がどうなるか想像できますか?実は、以下のようになります。
1 2
2 5
dtype: int64
このように見出し(index)が数字の場合と見出し(index)が文字列の場合では挙動が違います。見出し(index)が数字の場合には、「コロンの前に指定したもの」は含み、「コロンの後にしてたもの」を含みません。
私はこの差を意識していなかったため、何度かあれ?と思ったことがありました。しっかりおぼえておいてください。
マスク
次にマスクです。Seriesのサイズと同じサイズのbool値(True/False)のリストを指定すると、Trueの位置のみが選択されます。bool値のリストは角括弧内に記載します。aはSeriesが入った変数とします。
a[bool値のリスト]
Seriesに対して条件を指定すると、格納された値と条件を照らし合わせて、結果としてTrue/Falseが返ってきます。なので、「bool値のリスト」の部分をSeriesに対する条件式にすることができます。
a[Seriesに対する条件]
となります。この例を見ていきましょう。
sample_series[sample_series>5]
a 10
d 6
dtype: int64
このように[ ] の中で「sample_series>5」のように指定したので、この条件に合致するデータのみを抽出することができました。
loc, iloc
最後にloc, ilocです。pandasは特別なインデクス属性をもっています。これらはメソッドではなく、Seriesのデータに対して特定のスライス指定をおこなうための属性です。このインデクス属性に、loc属性、iloc属性があります。
これらについては以下の投稿にまとめてありますので、こちらを参照してください。
まとめ
いかがでしたか?今回はSeriesのデータ選択方法を学びました。
▶ DataFrameのデータ選択については、以下の記事をお読みください。
▶ データ分析を基本から学びたい場合は、以下の記事をご覧ください。
コメント