來吧,終於要來準備資料表,讓我們可以把 CSV 檔的大量資料匯進來。如果你心裡想:「欸,為什麼還要準備資料表?這有什麼難的?」那你還有很多現實世界的坑要踩。沒有哪個檔案是「完美」的。總會有點小狀況——像是重複資料、多餘空白、資料型態錯誤,或是結構根本對不上。
我們來看看怎麼正確準備資料庫,讓 CSV 檔可以順利匯進來,不會出包。
在你匯入 CSV 檔之前,先想清楚資料要怎麼存進資料庫。也就是說,先要建立一個結構合適的資料表。
範例:匯入學生資料
假設我們有個 CSV 檔 students.csv,裡面是學生的資訊。內容長這樣:
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
根據這個來建一個資料表:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- 學生唯一識別碼
name VARCHAR(100) NOT NULL, -- 學生名字(最長 100 字元)
age INT CHECK (age > 0), -- 學生年齡(必須大於 0)
email VARCHAR(100) UNIQUE, -- 唯一 email
major VARCHAR(100) -- 主修科目
);
id SERIAL PRIMARY KEY:我們加了一個主鍵,讓每一列都能唯一識別。如果你的 CSV 檔已經有唯一 id,就用檔案裡的id欄位。name VARCHAR(100) NOT NULL:學生名字一定要填,最多 100 字元。age INT CHECK (age > 0):年齡要是數字,還要大於 0。email VARCHAR(100) UNIQUE:email 要唯一,避免重複資料。major VARCHAR(100):這是學生主修,這裡沒特別限制。
你的資料表要設計得夠細心,才能配合你的資料,也能擋掉不正確的資料。這樣匯入時才不會一堆錯誤。
匯入前的資料檢查
CSV 檔常常會有驚喜。在你匯入資料前,先確定資料跟資料表結構是對的。
怎麼檢查資料?
欄位對齊
確認 CSV 的欄位數跟資料表一樣。例如資料表有 5 欄,CSV 有 6 欄,匯入就會失敗。資料型態
檢查每個欄位的資料型態對不對。像age欄就只能是整數。
驗證工具
Excel 或 Google Sheets。用表格軟體打開檔案,檢查有沒有空白列或是資料怪怪的儲存格。
Python。用 pandas 套件來檢查資料型態:
import pandas as pd
# 讀取 CSV
df = pd.read_csv('students.csv')
# 檢查資料
print(df.dtypes) # 印出每個欄位的資料型態
print(df.isnull().sum()) # 檢查有幾個空值
匯入前的資料清理
外部資料通常都要先清理。不然匯入時很容易出錯。
CSV 檔常見問題
空白列或欄
如果有必填欄位(NOT NULL)沒填,會直接報錯。
錯誤資料範例:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
解法:把空值換成允許的值。像 age 空的就填 NULL。
多餘空白
開頭或結尾有空白會出問題。像 "Alex" 跟 "Alex" 會被當成不同值。
Python 解法:把多餘空白去掉。
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
奇怪符號或編碼
如果檔案有資料庫不認得的特殊符號,匯入會失敗。
範例:用 iconv 轉換編碼:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
資料清理:Python 範例
import pandas as pd
# 讀檔案
df = pd.read_csv('students.csv')
# 清理資料
df['name'] = df['name'].str.strip() # 去掉空白
df['email'] = df['email'].str.lower() # email 全部轉小寫
df['age'] = df['age'].fillna(0) # 年齡空值補 0
df['age'] = df['age'].astype(int) # 年齡轉成整數
# 存成新檔案
df.to_csv('cleaned_students.csv', index=False)
匯入前一定要檢查資料。記住:厲害的工程師都會先抓問題,省下自己很多麻煩!
準備資料表和資料的實用檢查清單
開始處理 CSV 前,檢查一下:
- 資料表結構要跟資料對得起來(欄位、型態、限制)。
- CSV 檔不能有空白列、多餘空白或奇怪符號。
- 檔案編碼要跟 PostgreSQL 相容(最好用 UTF-8)。
- 你有用工具來分析和清理資料(像 Python、Excel)。
現在你已經可以開始從 CSV 匯入資料啦!不過在這之前,記得先把資料表結構設計好、資料也清理乾淨。下一堂課我們會繼續講怎麼把資料匯進 PostgreSQL,包括錯誤處理跟衝突解決。
GO TO FULL VERSION