Python 資料分析神器 (一):Pandas 入門與 DataFrame (第 27 章)

站主自己的課程,請大家支持
揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站? 揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站?
  • Post by
  • Jan 10, 2024
post-thumb

在真實世界的資料專案中,我們很少處理乾淨完美的數學矩陣,更多的是充滿缺失值、混合字串與數字的表格資料 (Tabular Data)。這時,NumPy 就稍顯吃力了。

Pandas 建立在 NumPy 之上,提供了更高級的 DataFrame 結構,讓我們能用類似 Excel 或 SQL 的方式處理資料。

1. 兩大核心:Series 與 DataFrame

Series (序列)

一維陣列,帶有標籤 (Index)。可以想像成是 Excel 的「一欄」或者更強大的 Dict。

import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s['a']) # 10

DataFrame (資料框)

二維表格,也就是多個 Series 的集合。這就是我們最常用的結構。

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Paris', 'London']
}

df = pd.DataFrame(data)
print(df)

輸出:

      Name  Age      City
0    Alice   25  New York
1      Bob   30     Paris
2  Charlie   35    London

2. 讀取資料 (I/O)

Pandas 支援超多格式,最常見的是 CSV 和 Excel。

# 讀取 CSV
df = pd.read_csv('data.csv')

# 讀取 Excel (需安裝 openpyxl)
df = pd.read_excel('sales.xlsx', sheet_name='Q1')

# 匯出資料
df.to_csv('output.csv', index=False)

3. 檢視資料

拿到資料的第一件事,就是看看它長什麼樣子。

print(df.head())      # 看前 5 筆
print(df.info())      # 查看欄位型別、記憶體用量、是否有缺失值
print(df.describe())  # 快速統計 (平均、標準差、最大最小值)
print(df.shape)       # (列數, 欄數)

4. 資料選取 (Selection)

Pandas 提供了兩種選取方式:loc (標籤)iloc (位置)

假設我們有以下資料:

         Name  Score
Index
101     Alice     90
102       Bob     85

選取欄位 (Column)

# 回傳 Series
print(df['Name']) 

# 回傳 DataFrame (雙中括號)
print(df[['Name', 'Score']])

使用 loc (Label-based)

# 選取 Index 為 101 的那一列
print(df.loc[101])

# 選取 101 的 'Name'
print(df.loc[101, 'Name'])

使用 iloc (Integer-based)

# 選取第 0 列 (不管 Index 是什麼,就是第一列)
print(df.iloc[0])

# 選取第 0~2 列
print(df.iloc[0:2])

5. 條件篩選 (Filtering)

這跟 NumPy 的布林索引很像,但更直觀。

# 找出 Score > 85 的人
high_score = df[df['Score'] > 85]

# 多重條件 (注意要用括號 & |)
target = df[(df['Score'] > 80) & (df['City'] == 'London')]

6. 總結

Pandas 是 Python 資料分析的靈魂。今天我們學會了:

  1. 建立 DataFrame。
  2. 讀寫 CSV。
  3. 使用 lociloc 切片。
  4. 基礎篩選。

下一章,我們將進入 Pandas 的深水區——資料清洗 (Data Cleaning) 與 聚合分析 (Group By),這佔據了資料科學家 80% 的工作時間!


延伸閱讀

LATEST POST
TAG