Python Pandas基礎④ -データ並び替え-

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

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

### 使用するExcelファイル

こちらを[リンク先を保存](http://kino-code.com/wp-content/uploads/2020/08/sample.xlsx)してローカルに落として利用しています。

### データの並び替え
#### シート名を指定してExcelを読み込む
Excelファイルをデータフレームとして読み込むには、read_excel関数を使用します。
read_excel関数の第1引数に、読み込みたいExcelファイル名を指定します。
続いて、第二引数のsheet_nameにシート名を渡すことで、指定のExcelシートを読み込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/6d2be190-92b4-08a2-8a55-0f41f7e5aeb5.png)

#### 列を指定して読み込む
引数usecolsにカラムを渡すことで、シート内の列を特定して読み込むことができます。
カラムの渡し方には、下記3通りの方法があります。
1. 列番号をリストで指定
usecols=[0,1,2,3]
2. Excelの列名（A,B,C,D...）を指定
usecols=('A:D')
3. カラムをリストで指定
usecols=['社員番号','氏名','所属支店','性別']
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/e117f418-78d6-d9b7-afb1-90a47d1285b0.png)

#### 指定した列を昇順で並び替え
指定の列でデータの並び替えを行うには、sort_valuesメソッドを使用します。
引数byに、並び替えを行う列のカラム名を渡します。
昇順→ascending=True
降順→ascending=False
デフォルトでは、昇順に並び替えが行われます。
ascending=Trueは省略可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/a7b1dbe8-76b9-df36-5e7d-b5705ba81571.png)

#### 複数列を指定して昇順で並び替え
複数のカラムを元に並べ替えたい場合は、カラムをリストで指定します。
複数のカラムを指定する場合は、まず一番目に指定したカラムで並び替えが行われ、その並び替えの結果から、次に指定したカラムで並び替えが行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/d49a1d80-20c6-fa52-1597-682b88b01edf.png)

#### 並び替え時のNaNの扱い
デフォルトでは昇順・降順いずれの場合でも、欠損値は末尾に並びます。
ただし、引数na_positionに文字列'first'を渡すと、欠損値を先頭に並べることができます。

氏名で昇順で並び替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/3ca60340-68ee-633f-8513-33cc62839e3b.png)

氏名で昇順に並び替え（na_position=fisrstを指定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/1600a862-cef6-a1a3-ffe2-a3b9516fe03e.png)

#### 行方向に並び替え
行方向にデータを並び替えるには、引数axisに1を渡します。
ただし、数値と文字列が混在している場合は、並び替えることができないことに注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/fd55602b-8426-1639-a2ef-09ec409b9081.png)

#### 列方向に並び替え2
axis=0を指定で列方向の並び替えになる（省略可能のためご参考）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/3f2b2505-7513-9091-b11a-098a37d51257.png)

#### 並び替えを元データに反映させる
元のデータフレームの値を並び替え後の値に変更するには、引数inplaceにTrueを渡し方法と引数inplaceを使わずに再度同じ変数に代入する方法があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/f52fbd9a-c5a0-67b3-aa92-f926e453cb18.png)

#### インデックスを並び替える
インデックスを並び替えるには、sort_indexメソッドを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/c24eebc2-e2ee-74cb-352d-ebdcba1dff26.png)

#### インデックスの並び替えをして元データに反映
inplaceをTrueで指定するか、変数に再代入すれば反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/cccc01f7-5280-47ca-e8dc-d355cbe67994.png)

#### インデックスに欠損値があった場合の並び替え
値の場合と同じくna_positionで'first'を指定すると上に持ってこれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/ad9a3be8-7089-ce5c-2fed-4ea08b4eb8c9.png)

#### カラムの並び替え
カラムを並び替えるには、インデックスと同様にsort_indexメソッドを使用します。
引数axisに1を渡すとカラムを並び替えすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/d9a34f10-1adb-87c6-3554-f866b776dd22.png)

#### シリーズを取得して並び替え

基本の組み合わせです。
データフレームからシリーズを取り出し、シリーズの値をsort_valuesしたものを変数に代入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/0f4754f8-c90f-2a52-c452-b56e93e5c1fd.png)

#### シリーズを取得してインデックスを並び替え（欠損値を上に）

こちらも同じく基本の組み合わせです。
データフレームからシリーズを取り出し、シリーズをsort_indexでインデックスで並び替え、かつ、na_position=''first'で欠損値を上に持ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/00c45775-c9ac-fd90-1922-191c4f2ad697.png)

### 終わり
すぐ忘れてしまうので何度も繰り返します。