Python

Python初心者向け:Seriesのデータ選択を基本から解説

スポンサーリンク

▶ データ分析を基本から学びたい場合は、以下の記事をご覧ください。

▶ pandasのデータ構造を基本から学びたい場合は、以下の記事をご覧ください。

この記事はこんな方におススメです
  • pythonによるデータ分析を学び始めたばかりでpandasライブラリの基本を学びたい方
  • Seriesのデータ選択方法について基本を学びたい方
  • 「Seriesについての基本」を速習したい方

はじめに

今回は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のデータ選択方法を学びました。

  • Seriesでは、辞書型と同じように角括弧[ ] でindexを指定してデータ選択ができる
  • 一次元配列と同じようにスライスによるデータ選択ができる
  • スライスでは、indexが文字列か数字かで挙動が違うので注意する
  • Seriesのデータに対して特定のスライス指定をおこなうための属性loc, ilocがある

▶ DataFrameのデータ選択については、以下の記事をお読みください。


▶ データ分析を基本から学びたい場合は、以下の記事をご覧ください。

コメント

タイトルとURLをコピーしました