pandasのデータの読み込みからデータの抽出まで

# 初めに
- pandasを初めて触る方向けに、基本的なデータの読み込み方から、必要なデータの抽出方法までを公開データを用いて解説して行きます。なので、データの準備は不要です。自分もデータ分析を始めたばかりで結構躓いたので、これから勉強を始める方の助けになれると嬉しく思います。

***
## モジュールをインポート
- Pandasは、データを簡単に取り扱う為のデータ操作ツール
- Plotly Expressは、いくつかの公開データセットにアクセスするための便利な関数を提供
```Python
import pandas as pd
import plotly.express as px
```
# ファイルの読み込み

- 今回はアイリスの花の公開データ読み込みます
- px.data.iris()でアイリスデータセットの公開データを読み込めます
```Python
df = px.data.iris()
```

- 補足：通常のcsvファイル読み込む方法。今回は公開データなので使わないです。pd.read_csvは、pandasライブラリを使用してCSVファイルを読み込むための関数です。
```Python
file_path = 'ファイルパス.csv'
df = pd.read_csv(file_path)
```

# 中身データ
- 'sepal_length': がく片の長さ　　'sepal_width': がく片の幅　　'petal_length': 花びらの長さ
- 'petal_width': 花びらの幅　　'species': アヤメの種類　　'species_id': アヤメの種類を表すID
```Python
# .head()関数は、pandasデータフレームの先頭の行を表示するための関数。デフォルトでは、先頭から5行を表示。
df.head()
```
![アイリスの花ヘッド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/42ab192b-a22d-ffa6-ad4b-894fe5db86b2.png)

```Python
# データフレームの行数と列数を返す
df.shape
```
```
#結果
(150, 6)
```
150行と6列のカラムが入っています。つまり、データ数が150でヘッダーが6列あるデータということです。


# カラム名を取得
```Python
# カラム（列）のラベルを取得
df.columns
```
カラム名を取得できます。
```Python
結果
Index(['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species',
       'species_id'],
      dtype='object')
```
***
## 次はデータの指定方法です。
df['カラム名']で指定できます
```Python
df['sepal_length']
```
```
0      5.1
1      4.9
2      4.7
3      4.6
4      5.0
      ... 
145    6.7
146    6.3
147    6.5
148    6.2
149    5.9
Name: sepal_length, Length: 150, dtype: float64
```
## 複数のデータを指定
複数のデータの場合は[]を増やして、df[['カラム名', 'カラム名']]です。データ数を増やす場合は,を増やして書いていけば大丈夫です。
```Python
df[['sepal_length', 'sepal_width']]
```
結果
![2023-06-19 132832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/59f3e06f-8aca-9d18-e2f4-a5536f99588a.png)

# 条件によるデータ抽出の仕方
df[df['カラム名'] 条件]
```Python
df[df['petal_length'] == 1.4]
```
![2023-06-19 133909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/77ab31ce-dc65-b766-0d2a-c816d8d7b930.png)
petal_lengthが1.4のデータが抽出できていることが分かります。

# 複数の条件でデータを抽出
df[(条件１) & (条件２)]

```Python
df[(df['petal_length'] == 1.4) & (df['petal_width'] == 0.2)]
```
![2023-06-19 134608.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/581373b5-7ef9-d718-1757-2b1603708102.png)
「petal_lengthが1.4」で「petal_widthが0.2」なデータを取得することができました。
```Python
condition1 = df['petal_length'] == 1.4
condition2 = df['petal_width'] == 0.2
df[condition1 & condition2]
```
こういう書き方もできます

# 条件によるデータ抽出の仕方その２(queryメソッド)
- .query()メソッドは、pandasデータフレーム（DataFrame）に対して条件を指定して行をフィルタリングするために使用
- .query()メソッドを使用することで、条件を直接文字列として指定することができます。
```Python
df.query('petal_length >= 1.4')
```
![2023-06-19 135210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/474b78be-2b3f-77fe-5473-f9f36e1d48e0.png)
petal_lengthが1.4以上のデータを抽出することができました。

# 複数の条件でデータを取得その２(queryメソッド)
df.query('(条件) & (条件)')
```Python
df.query('(petal_length >= 1.4) & (petal_width >= 0.2)')
```
![2023-06-19 140013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3482837/59bfa2bc-c75f-8275-4b88-85c43123b568.png)
petal_lengthが1.4以上かつpetal_widthが0.2以上のデータが取得できました。

# 参考
[ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門](https://www.udemy.com/course/optworks_1/)
[データサイエンスのための実践Pandas](https://www.udemy.com/course/be-a-pandas-pro/)
ChatGPTへの質問

# 終わりに
今回はデータの読み込み方から、必要なデータの抽出方法をご紹介しました。
次回は時系列データの扱い方をまとめようと思います。