Pandas 讀取資料
Pandas 可以讀取多種格式的資料檔案,包括 CSV、Excel、JSON、SQL 等。讀取後的資料會轉換成 DataFrame。
讀取 CSV 檔案
CSV(Comma-Separated Values)是最常見的資料格式,使用 read_csv() 讀取:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
常用參數
# 指定分隔符號(預設是逗號)
df = pd.read_csv('data.csv', sep=';')
# 指定編碼(處理中文常用 utf-8 或 big5)
df = pd.read_csv('data.csv', encoding='utf-8')
# 指定哪一欄當作索引
df = pd.read_csv('data.csv', index_col='id')
# 指定要讀取的欄位
df = pd.read_csv('data.csv', usecols=['name', 'age'])
# 跳過前幾列
df = pd.read_csv('data.csv', skiprows=2)
# 只讀取前 n 列
df = pd.read_csv('data.csv', nrows=100)
# 指定缺失值的表示方式
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', ''])
沒有欄位標題的 CSV
# 如果 CSV 沒有標題列
df = pd.read_csv('data.csv', header=None)
# 自訂欄位名稱
df = pd.read_csv('data.csv', header=None, names=['col1', 'col2', 'col3'])
讀取 Excel 檔案
使用 read_excel() 讀取 Excel 檔案:
df = pd.read_excel('data.xlsx')
需要先安裝 openpyxl 套件:
pip install openpyxl
常用參數
# 指定工作表(預設讀取第一個)
df = pd.read_excel('data.xlsx', sheet_name='Sheet2')
# 用索引指定工作表(從 0 開始)
df = pd.read_excel('data.xlsx', sheet_name=0)
# 讀取所有工作表(回傳 dict)
dfs = pd.read_excel('data.xlsx', sheet_name=None)
讀取 JSON 檔案
使用 read_json() 讀取 JSON 檔案:
df = pd.read_json('data.json')
不同 JSON 結構
# 陣列格式的 JSON
# [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]
df = pd.read_json('data.json')
# 物件格式的 JSON
# {"name": {"0": "Alice", "1": "Bob"}, "age": {"0": 25, "1": 30}}
df = pd.read_json('data.json', orient='columns')
從剪貼簿讀取
如果你從 Excel 或網頁複製了表格資料,可以直接讀取:
df = pd.read_clipboard()
從網址讀取
Pandas 可以直接從 URL 讀取資料:
url = 'https://example.com/data.csv'
df = pd.read_csv(url)
讀取 SQL 資料庫
使用 read_sql() 從資料庫讀取:
import sqlite3
# 建立資料庫連線
conn = sqlite3.connect('database.db')
# 執行 SQL 查詢
df = pd.read_sql('SELECT * FROM users', conn)
# 關閉連線
conn.close()
讀取 HTML 表格
從網頁中讀取 <table> 標籤的表格:
# 回傳一個 DataFrame 的 list(網頁中可能有多個表格)
tables = pd.read_html('https://example.com/page.html')
df = tables[0] # 取第一個表格
需要安裝 lxml 或 html5lib:
pip install lxml
讀取大型檔案
處理大型檔案時,可以分批讀取:
# 分批讀取,每次 1000 列
chunks = pd.read_csv('large_data.csv', chunksize=1000)
for chunk in chunks:
# 處理每個 chunk
print(chunk.shape)
常見問題
編碼錯誤
如果遇到編碼錯誤,嘗試不同的編碼:
# 常見編碼
df = pd.read_csv('data.csv', encoding='utf-8')
df = pd.read_csv('data.csv', encoding='big5') # 繁體中文
df = pd.read_csv('data.csv', encoding='gbk') # 簡體中文
df = pd.read_csv('data.csv', encoding='latin1')
自動偵測分隔符號
使用 Python 的 csv 模組偵測:
import csv
with open('data.csv', 'r') as f:
dialect = csv.Sniffer().sniff(f.read(1024))
df = pd.read_csv('data.csv', sep=dialect.delimiter)