CodeGym /課程 /SQL SELF /為從 CSV 載入資料準備資料表

為從 CSV 載入資料準備資料表

SQL SELF
等級 23 , 課堂 2
開放

來吧,終於要來準備資料表,讓我們可以把 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 檔常常會有驚喜。在你匯入資料前,先確定資料跟資料表結構是對的。

怎麼檢查資料?

  1. 欄位對齊
    確認 CSV 的欄位數跟資料表一樣。例如資料表有 5 欄,CSV 有 6 欄,匯入就會失敗。

  2. 資料型態
    檢查每個欄位的資料型態對不對。像 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,包括錯誤處理跟衝突解決。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION