## 接下來…
<img src="https://hackmd.io/_uploads/Bk-OZVkMxl.png" width="500"></img>
----
### 什麼是 Pandas
Pandas 在 Python 當中相當於是 Excel
用來分析與操縱表格資料
----
### 安裝 Pandas
就跟其他任何 Python 套件一樣
Pandas 可用 pip 安裝:
```bash
$ pip install pandas
```
然後在 Python 中 import
```python
import pandas as pd
```
---
## 使用 Pandas
----
### 核心資料結構:`DataFrame`
就如同 `ndarray` 是 NumPy 中的核心資料結構
Pandas 的核心資料結構是 `DataFrame`
也就是一張表格
----
### 建立 `DataFrame`
有多種方式可以建立 `DataFrame`
```python
import pandas as pd
import numpy as np
# 從裝 list 的 list 建立
df = pd.DataFrame([
['Alice', 19, True],
['Bob', 21, True],
['Charlie', 56, False]
], columns=['name', 'age', 'is_student'])
# 從 NumPy 二維陣列建立
df = pd.DataFrame(np.randn(5, 3), columns=list('ABC'))
# 從裝 dict 的 list 建立
df = pd.DataFrame([
{'name': 'Alice', 'age': 19, 'is_student': True},
{'name': 'Bob', 'age': 21, 'is_student': True},
{'name': 'Charlie', 'age': 56, 'is_student': False}
])
# 從裝 list 的 dict 建立
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [19, 21, 56],
'is_student': [True, True, False]
})
# 從 CSV 檔建立
df = pd.read_csv('data.csv')
# 從 Excel 檔建立
df = pd.read_excel('data.xlsx')
```
----
接下來,我會用著名的
「鐵達尼號資料集」
來進行示範
<img src="https://hackmd.io/_uploads/BJZWLIJzll.png" width="600"></img>
---
## 選取&分析資料
----
### 表格常識
* 橫的叫列(row),直的叫行(column)
* 一筆資料是一列,會有多個欄位的值
* 一行代表一個欄位
----
### 我們有幾筆資料?
要知道資料筆數
可以數 `index` 的長度
```python
len(df.index)
```
或是像 NumPy 那樣看 `shape`
```python
df.shape[0]
```
我們得出有 891 名鐵達尼號旅客的資料
----
### 依值排序資料
用 `sort_values()`
可以依照某欄位的值排序資料
```python
df.sort_values('Age')
```
預設是由小到大
可以傳入 `ascending=False` 反過來排
```python
df.sort_values('Age', ascending=False)
```
----
### 選取某個欄位
用方括號與欄位名就可以選取特定欄位
```python
df['Name']
```
把多個欄位包在 `list` 裡
就可以一次選取多個欄位
```python
df[['Name', 'Age']]
```
----
### 選取某幾筆資料
可以用方括號依索引選取資料(不含尾)
```python
df[10:15]
```
或是使用 `loc` 跟 `iloc`
```python
df.loc[10:14] # 含尾
df.iloc[10:15] # 不含尾
```
也可以依條件選取資料
```python
df[df['Survived'] == 1] # 選取所有生還者
df[df['Age'] > 30] # 選取所有超過 30 歲的乘客
# 選取所有從 Cherbourg 或 Queenstown 上船的乘客
df[df['Embarked'].isin(['C', 'Q'])]
```
----
### 同時選取行與列
最直覺的方式就是
用方括號先取列再取行
```python
df[10:15][['Name', 'Sex']]
```
但請避免這種作法
因為這樣實際上要選兩次
而 `loc` 和 `iloc` 可以一次選完
```python
df.loc[10:14, ['Name', 'Sex']] # 含尾,以欄位名稱選取
df.iloc[10:15, 3:5] # 不含尾,以欄位編號選取
```
----
### 分析資料
```python
df.describe() # 所有欄位的各項統計值
df['Age'].mean() # 乘客平均年齡
df['Age'].median() # 乘客年齡中位數
df[['Sex', 'Age']].groupby('Sex').mean() # 各性別平均年齡
df['Pclass'].value_counts() # 各個艙位的乘客數量
```
----
一旦學會了如何用 Pandas 選取和分析資料
也就可以搭配 Matplotlib 等工具進行視覺化
```python
import matplotlib.pyplot as plt
sexes = df['Sex'].value_counts()
plt.bar(sexes.index, sexes)
plt.show()
```
<img src="https://hackmd.io/_uploads/HkAJeq1Gel.png" width="500"></img>
---
## 結語
恭喜你掌握 Python 資料分析的三大法寶
<div style="display: flex; flex-direction: row; justify-content: space-evenly">
<img src="https://static-00.iconduck.com/assets.00/file-type-numpy-icon-1901x2048-oulkqypt.png" width="200"></img>
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Matplotlib_icon.svg/1024px-Matplotlib_icon.svg.png" width="200"></img>
<img src="https://pandas.pydata.org//static/img/favicon_white.ico" width="200"></img>
</div>
有了這些工具
無論什麼挑戰都難不倒你了
{"title":"Pandas","contributors":"[{\"id\":\"6f837504-512a-4e38-b145-0e8a28bc74ab\",\"add\":4131,\"del\":628}]","description":"<img src=\"https://hackmd.io/_uploads/Bk-OZVkMxl.png\" width=\"500\"></img>"}