## 接下來… <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>"}
    32 views