今天要介紹的是 SQL 中的 JOIN 功能,是取用資料時非常常用的語法,他可以把兩張或多張表格串在一起,跨表格使用欄位資訊,串接靠的是兩張表格中可以對應的 KEY 值。
舉例來說,超市的資料庫裡會有一張會員資料檔,上面記錄了會員的 姓名、ID、生日、性別、年齡與電話等基本資料;同時,還有另一張銷售紀錄檔,紀錄了該會員的 ID,以及每次消費的金額、日期、時間、品項、分店等消費資訊,這時候我們用 ID 作為 KEY 值串起兩張表,就可以知道「20–30歲的男、女性分別都愛買些什麼商品?」,也就可以針對不同客群去制定活動促銷方案。
首先我們先自建一個簡單的會員資料檔。
# 匯入函式庫
import pandas as pd
# 建立四個欄位資料
ID = pd.Series(['A013', 'A187', 'A046', 'A087', 'A155'])
Name = pd.Series(['Nancy','Kevin','Sofia','Aaron','Mike'])
Age = pd.Series([45, 36, 22, 26, 23])
Gender = pd.Series(['F', 'M', 'F', 'M', 'M'])
# 建立一個表格 - 會員資料檔
customer = pd.DataFrame({ 'ID': ID,
'Name': Name,
'Age': Age,
'Gender': Gender})
print(customer)
再來建一個銷售紀錄檔。
# 建立四個欄位資料
TXN_ID = pd.Series(['A187', 'A187', 'A155', 'A013'])
TXN_DATE = pd.Series(['2020-03-06','2020-03-21',
'2020-03-29','2020-04-12'])
TXN_AMT = pd.Series([260, 500, 400, 120])
TXN_CATEGORY = pd.Series(['Food', 'Clothes', 'Sport', 'Book'])
# 建立一個表格 - 銷售紀錄檔
TXN = pd.DataFrame({ 'ID' : TXN_ID,
'Date' : TXN_DATE,
'Amount' : TXN_AMT,
'Category' : TXN_CATEGORY })
用 ID 當 KEY 值串連兩張表,我們用的是 merge 語法。
Merge_left = pd.merge(customer, TXN, how='left', on=['ID'])
print(Merge_left)
上面語法的意思是要用會員資料檔(customer)來串銷售紀錄檔(TXN),要使用兩表中的 ID 當作 KEY 值串接起來(注意,兩張表的 KEY 值欄位名稱要相同),串接的方法是 left join。可以看到結果如下:
- 由於 A187 這位會員分別有兩筆銷售紀錄,因此原本的 customer 表中出現兩筆 Kevin 的資料。
- 由於A046、A087沒有銷售紀錄,因此在右表(TXN)中顯示為 NaN。
如果我們只想列出有購買記錄的會員,那麼就用 inner join 的方式去除有 NaN 的資料。
Merge_inner = pd.merge(customer, TXN, how='inner', on=['ID'])
print(Merge_inner)
merge 的串接方式(merge method)其實共有 left、right、outer、inner,可以修改 how=’ ’ 這部分來看看串接出的效果,至於什麼時候該用什麼方法串接,就端看分析需求了。