Science今回はPandasで特定の行や列の情報だけを選んで抽出したい・表示したいときに使えるilocとlocの使い方の基本を解説します。データ分析でよく使われる機能ですので慣れておくと今後の学習などが捗ります。使用例4:ラムダ関数を使う今回使うデータ今回は次のようなPandaのデータフレームの表を使って解説します。データサイエンスコンペティションKaggleのタイタニックのデータです。Dockerを使ってWindowsでもMacでもLinuxでも同じPython環境やデータ分析環境を作る方法をこちらの記事で解説しています。VSCode+DockerでKaggle環境を作る方法の解説Dockerは初歩的な使い方だけでもできるようになると本当に便利なのでぜひ試してみてください。ilocの使い方の基本ilocとは?ilocとは、行または列のインデックス(Index)情報を基準として特定の行や列だけを抽出する機能です。前提知識:PythonのリストとインデックスPythonにおけるインデックスについては、リストオブジェクトを例にするのが理解しやすいでしょう。リストオブジェクトを1つ作ってみます。"Microsoft"]このリストにおいてインデックスとは、要素の順番を示す整数です。ここでは次のように順番と要素が対応しています。Microsoft最初のインデックスは、標準では0から始まることに注意しましょう。実際にインデックスを指定してリストの各要素を確かめてみましょう。new_list[2]'Microsoft'となります。基本的な使用方法ilocは基本的に次のように使います。列のインデックス情報このような情報となります。2の列のインデックス情報は省略が可能です。行のインデックス情報を省略して、データフレーム.iloc[列のインデックス情報]と書いても、頭の中で思い描いた「列のインデックス情報」の指定は実際には「行のインデックス情報」の指定として扱われます。最初に書いてあるインデックス情報はつねに「行のインデックス情報」となるように設計されているからです。上述のように今回はこのようなデータフレームを使います。このデータフレームオブジェクトの名前を今回は「train_df」としています。このデータフレームのうち、行インデックスの0番から4番までの5つのデータを抽出してみます。Pythonにおけるスライス表記([X:Y]という書き方)を使います。train_df.iloc[0:5]注意点は、次の2点です。4番までのデータを指定していることこの結果は、このようになります。ちなみに同じ結果を実現するために、ilocを使わなくても次のようにheadメソッドを使うこともできます。train_df.head(5)使用例2:行と列について両方のインデックスを指定では次の行と列の両方ともインデックスを指定してみましょう。そもそも列のインデックスというものを把握しておきましょう。そのためにひとまずcolumnsを使い、データフレームの列のラベルを確認しておきましょう。dtype='object')続いて、train_df.columns[0]とすると、'PassengerId'となります。このように列のラベルもインデックス情報を持っていることがわかりました。列ラベル「Pclass」→インデックス2番などのように対応します。0:2]行のインデックス0〜4番までと、列のラベルのインデックス0番である「PassengerId」と、インデックス1番である「Survived」もあわせて抽出することができます。使用例3:負のインデックスも可能このilocにおけるインデックスは整数を使って指定しますが、実はPythonの普通のリストと同じく負の整数も使えます。癖がある結果となります。-4だから)の情報を抽出することとなります。これの結果は、このようになります。これは行のインデックスが次のようになっているからです。実は、Series型またはDataFrame型を呼び出す関数で、変数が1つだけの関数を指定することもできます。使われるのがラムダ関数でしょう。行のインデックスについて、「9で割ったときの余りが8となるインデックス番号」だけ抽出したいときは次のようにします。8]結果はこうなります。“b”]などの表記)引数が1つだけの関数で、Series型やDataFrame型を呼び出すものなどによって行や列を指定するものです。ilocとの違いと注意点ilocとの違いは、上述の通りilocは「インデックス(index)」情報を使って行や列を指定するものですが、locは「ラベル」を使って指定するものという点が本質的な違いとなるでしょうか。実は重要な違いがあと1つあります。それはスライス表記を使って範囲を指定した場合の動作が違うことです。この点については下記「使用例2:行と列の両方についてスライスで指定」で解説しています。locの基本的な使用方法ilocと同じく、locも基本的に次のように使います。列のインデックス情報それではこれまでと同じく下の画像のデータフレームを使って具体的な使用例を見ていきましょう。使用例1:整数で指定train_df.loc[1]上述のようにlocは「ラベル」情報を使うのが基本ですが、このように整数を使うこともできます。これは行についての指定となり、「1」というラベルがついた行の情報を抽出することになります。列のインデックス情報という使い方は同じであり、loc[1]とすると、最初の情報として指定した整数「1」は自動的に「行についての情報」となるからです。整数「1」は「ラベルの名称」(文字列のように)解釈されます、インデックスの順番を示す番号としては扱われません。「1」という文字を使った行のラベルとして処理されます。して実行結果は、次のようになります。今回指定したラベルの情報はあくまで行についてだけで、列については何もしていないので、行「1」の情報がまとめて表示されます。"PassengerId":"Age"このように行と列のそれぞれにスライス表記を使ってみました。結果は、このようになります。ここで重要なのはスライスを使った場合の範囲指定の内容です。bこうすると、aから「b-1」までの範囲を指定したことになります。これはiloc[a:b]の場合でも同じです。bこのように、aからbまでの範囲を指定したことになります。この点に注意が必要です。次のように条件を使った指定も可能です。"male")]これはAgeが20歳以下でSexがmaleという条件を指定しています。使用例4:ラムダ関数を使う上述のようにlocはラベル情報だけでなく、ブーリアン型の要素の配列(array)も使うことができます。そこで、ブーリアン型配列を返す関数も使うことができます。ブーリアン型の配列を返すラムダ関数を使ってみます。1]この仕組みを大雑把に説明すると、まず変数xには、データフレームtrain_dfが代入されます。列ラベルSibSPの値が1という条件を満たすかどうかで0または1のブーリアン型の配列が生成され、それをもとにlocが機能するという仕組みになっています。世界最大級のオンライン学習プラットホームUdemy(ユーデミー)では、Pythonやデータ分析の様々な講座が用意されています。大幅に割引されるセールもよく開催されています。