Python Pandas基礎③ -データ抽出-

### 初めに

Pythonのpandasについて初学者なりにまとめたいと思います。
学習に使っているのはこちらのキノコードです。

https://kino-code.com/category/introductory-course-pandas/

### 学習環境
JupyterLabを使用します。
初心者向けに使い方を紹介してますのでよければご覧ください。

https://qiita.com/y-matsunaga/items/2c7efdae8777f15059e0

[使用するCSVファイル](https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200521&tstat=000001011777&cycle=0&tclass1=000001094741&tclass2val=0)
出典：政府統計の総合窓口(e-Stat)
「男女別人口－全国，都道府県（大正９年～平成27年）」（総務省）を加工して作成

### データ抽出の基礎
#### データの取り込み
まずは、CSVを読み込んでデータフレームを作成するところから始めます。
set_optionで表示列数と行数を変更します。
Pandasをimportし、read_csv関数で読み込んで、dfに代入します。
ipynbファイルと同階層いCSVを配置しておくと、パスを省略し、名前を指定するだけで読み込むことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/7f1f6881-67ac-0998-aea2-d152c69b945f.png)

#### スライスで最初の３行を抽出
データフレームオブジェクトにスライスを使用することで、指定の行のデータを抽出することができます。

df[開始位置の行番号：終了位置の行番号]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/1bf4c7ea-1be0-45bf-9637-d63b22b5dd85.png)

#### カラムをシリーズで抽出
データフレームからカラムをシリーズで取得するには、角括弧でカラム名を指定します。
下記のように記述します。
データフレームの変数['カラム名']

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ed0c4802-0a2a-3e45-672d-045ff3b0f099.png)

#### カラムから条件に一致する値を抽出
特定のカラムにおいて条件に一致する値を取得するには、まずカラムと取得したい値を関係演算子（比較演算子）の==（イコール2つ）で結びます。
こうすることで、カラムの値が2015と等しい値にはTrue、異なる場合にはFalseが、シリーズとして取得されます。
最後に、その記述を角括弧の中に入れると、Trueの値が返された行のみでデータフレームが取得されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/83cf7381-8654-ce83-a4cd-3c017101f7f5.png)

#### カラムから条件に一致しない値を抽出
Not演算子のにょろにょろ(~チルダ)を使用することで、条件を否定したものを抽出できます。
また、比較演算子である、ビックリマーク(!エクスクラメーションマーク)でも表現することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/440ca475-3786-2d45-224f-92f720bf70d3.png)

#### 複数条件で抽出
AND条件（かつ）やOR条件（もしくは）で値を抽出することができます。
2つの条件を満たすデータを抽出するには、論理演算子の（&アンパサンド）またはandを使用します。
2つの条件のいずれかを満たすデータを抽出するには、論理演算子のorまたは（|パイプライン） を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/78b7645a-1cbc-ec74-b3c0-b29ddf83a37b.png)

#### カラム名の変更
データフレームのカラム名を変更するには、renameメソッドを使用します。
df.rename(columns={'辞書型で': '変更後のカラム名'})と指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/4a45fe33-bf84-6f5d-2ef1-29443ae82da8.png)

#### queryメソッドを使用した抽出
queryメソッドを使用することで、特定の条件でデータ抽出をすることができます。
queryメソッドでは、引数に文字列で条件を指定します。

単独条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/29caa9b4-6ce7-16ee-d523-03f5e8fa5463.png)

複数条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/777288f0-6fe3-0701-dfaf-66ff0dce4ef6.png)

#### isinメソッドを使用した抽出
isinメソッドを使用してデータ抽出をすることもできます。
isinメソッドは、引数に指定した値が、データフレームの列の値に含まれるか否かをTrueまたはFalseで返します。
なお、引数に渡す値はリスト型で指定します。
この記述をデータフレームの角括弧で囲むと、Trueの値の行のみが抽出されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/015b73e2-b8c0-2fb5-fde8-7151e4686147.png)

#### 特定の文字列が含まれるデータを抽出

特定の文字列を含む要素を持つ行のデータを抽出するには、strメソッドとcontainsメソッドを組み合わせて使用します。
strメソッドとは、文字列表現を定義するために用いるメソッドです。
containsメソッドとは、特定の値を含むデータをTrueまたはFalseで返します。

都道府県名に山が含まれるデータを抽出
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/9ae7a494-aa41-0c36-2260-09babe6fd86a.png)

特定の文字や文字列から始まるデータを抽出するには、strメソッドとstartswithメソッドを組み合わせて使用します。
特定の文字や文字列で終わるデータを抽出するには、strメソッドとendswithメソッドを組み合わせて使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/5553b721-1c59-0b96-f7f3-4ddcc703ebe5.png)

#### 最大のデータを抽出
指定した列の最大値に当てはまるデータを抽出するには、まずmaxメソッドを使用します。
続いて、関係演算子（比較演算子）の==（イコール2つ）でdf['西暦（年）'] と結ぶことで、'西暦（年）'の最大値に等しいデータをTrueで返します。
最後に、この記述全体をデータフレームの角括弧で囲むことで、'西暦(年）'の最大値に等しい行がデータフレームとして表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/998b4a77-073e-acec-fcb3-214f5e725570.png)

#### locプロパティを使用してデータを抽出
locプロパティで、インデックス名とカラム名を指定してデータを抽出することもできます。
locプロパティの指定方法は、角括弧の中の第1要素にインデックス名、第二要素にカラム名を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/13f6dc6a-b809-f98d-1005-f5055e35d819.png)

### 終わり
覚えること多いですが、基本なのでしっかり押さえたいです。