pandasメモ

　学びのメモとして、pandas周辺のコードをチートシート代わりに自分の参考用としてまとめています。

<b>1. pandasのインポート</b>

```python
import pandas as pd
```
<b>2. DataFrameの作り方</b>
　辞書から作成する方法と、CSVファイルから読み込む方法の２つがある。
①辞書から作成する方法

```python
import pandas as pd
dict = {"name":["Hokkaido","Tokyo","Aichi","Osaka"],
        "capital":["Sapporo","Shinzyuku","Nagoya","Osaka"],
        "area":[83424,2191,5172,1905],
        "population":[5286,13822,7537,8813]}
prefecture = pd.DataFrame(dict)
prefecture
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/39c8070f-d557-3d90-6aef-10e9bb205858.png)

②CSVファイルから読み込む方法

```python
import pandas as pd
#read_csv関数を使用
prefecture = pd.read_csv("path/to/prefecture.csv")
```
　しかし、このままではcsvファイルの行ラベルが、それ自体が列として認識されてしまうため、最初の列に行インデックスが含まれていることを以下の様に知らせる。

```python
import pandas as pd
#index_col=0とすることで、インデックスが0である列が行ラベルであることを知らせる
prefecture = pd.read_csv("path/to/prefecture.csv", index_col = 0)
```

<b>3. 行ラベルの設定

```python
prefecture.index = ["北海道","東京","愛知","大阪"]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/30162b56-95fc-419a-6b13-9108b0b062a1.png)

<b>4. DataFrameからデータを選択</b>
　角括弧("[]")を用いる方法と、locやilocなどのアクセスメソッドを用いる方法の2種類がある。
①[]を用いる方法

```python
#nameの列のみを選択
prefecture["name"]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/d0c02a2b-f542-193f-f493-044097559e3d.png)
　しかし、この方法で取り出したデータ型はpandasSeriesというデータ型であり、DataFrameではない。DataFrameとしてデータを取り出すには以下の様に[]を2重にして記述する。

```python
#角括弧を二重にすることでデータ型をDataFrameにしたままデータを抽出
prefecture[["name"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/69afe4bb-49a7-e578-d0df-400b77985b41.png)

　また、以下の様にして複数列を取り出すこともできる

```python
#複数の列を選択できる
prefecture[["name","capital"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/b25e5dfc-ab27-5908-f6a9-d9b511639dea.png)

　横の行を取り出すためにはスライスを使用する。

```python
prefecture[1:3]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/abe3a91c-fbd4-85da-7aa6-da1d00955102.png)

②loc、ilocを用いる方法
　locはラベルに基づいてデータを選択、ilocは位置に基づいてデータを選択できる。
　locは、以下の様にDataframe名.loc["行ラベル"]と記述すると、その行のデータを選択できる。

```python
prefecture.loc["東京"]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/0dcb042c-489f-f585-b52a-bf086dd6375d.png)
　しかし、このやり方ではまだデータ型がDataFrameではなくなってしまうため、DataFrameとして選択したい場合は角括弧を二重で用いる。

```python
prefecture.loc[["東京"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/41784992-4464-1b3e-78a0-38e95624db33.png)

　以下の様に記述することで、複数の行を選択できる。

```python
prefecture.loc[["東京","愛知"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/2bd48349-b8df-a7b2-3655-9692c4fd97c4.png)

　さらに、以下の様に記述すれば、列も指定ができ、指定をした行と列の交差点のみのデータを選択できる。

```python
prefecture.loc[["東京","愛知"],["name","capital"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/36b95615-25a9-df8d-7b21-b2fd06a807a0.png)
　リストと同様、":"だけで全選択を意味する。

```python
#":"を用いて、行を全選択
prefecture.loc[:,["name","capital"]]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598816/df4bde5c-4ed5-dde7-c7d4-f5e0961fabc3.png)

　ilocはlocで行ラベルを使用する代わりに、インデックスを使用。

```python
#下記2つは全く同じ結果を返す。
prefecture.loc[["東京"]]
prefecture.iloc[[1]]

#下記2つは全く同じ結果を返す。
prefecture.loc[["東京","愛知"]]
prefecture.iloc[[1,2]]

#下記2つは全く同じ結果を返す。
prefecture.loc[["東京","愛知"],["name","capital"]]
prefecture.iloc[[1,2],[0,1]]

#下記2つは全く同じ結果を返す。
prefecture.loc[:,["name","capital"]]
prefecture.iloc[:,[0,1]]
```