驗證完整性

使用 pandas 進行資料表連接

Aaren Stubberfield

Instructor

來檢查資料

可能的合併問題:

兩個 DataFrame 水平拼接,出現一對多關係

  • 無意的一對多關係
  • 無意的多對多關係

可能的串接問題:

兩個 DataFrame 垂直合併,第二個 DataFrame 有重複列

  • 可能無意引入重複紀錄
使用 pandas 進行資料表連接

驗證合併

.merge(validate=None)

  • 檢查合併是否為指定型態
  • 'one_to_one'
  • 'one_to_many'
  • 'many_to_one'
  • 'many_to_many'
使用 pandas 進行資料表連接

合併資料集範例

資料表名稱:tracks

  tid  name             aid  mtid  gid  u_price
0 2    Balls to the...  2    2     1    0.99   
1 3    Fast As a Shark  3    2     1    0.99   
2 4    Restless and...  3    2     1    0.99   

資料表名稱:specs

  tid  milliseconds  bytes  
0 2    342562        5510424
1 3    230619        3990994
2 2    252051        4331779
使用 pandas 進行資料表連接

合併驗證:one_to_one

tracks.merge(specs, on='tid', 
             validate='one_to_one')
Traceback (most recent call last):
MergeError: Merge keys are not unique in right dataset; not a one-to-one merge
使用 pandas 進行資料表連接

合併驗證:one_to_many

albums.merge(tracks, on='aid', 
             validate='one_to_many')
  aid  title            artid  tid  name             mtid  gid  u_price
0 2    Balls to the...  2      2    Balls to the...  2     1    0.99   
1 3    Restless and...  2      3    Fast As a Shark  2     1    0.99   
2 3    Restless and...  2      4    Restless and...  2     1    0.99   
使用 pandas 進行資料表連接

驗證串接

.concat(verify_integrity=False)

  • 檢查新串接後的索引是否有重複
  • 預設為 False
使用 pandas 進行資料表連接

.concat() 範例資料集

資料表名稱:inv_feb

     cid  invoice_date  total
iid 
7    38   2009-02-01    1.98 
8    40   2009-02-01    1.98 
9    42   2009-02-02    3.96 

資料表名稱:inv_mar

     cid  invoice_date  total
iid 
9    17   2009-03-04    1.98 
15   19   2009-03-04    1.98 
16   21   2009-03-05    3.96 
使用 pandas 進行資料表連接

驗證串接:範例

pd.concat([inv_feb, inv_mar], 
          verify_integrity=True)
Traceback (most recent call last):
ValueError: Indexes have overlapping 
values: Int64Index([9], dtype='int64', 
name='iid')
pd.concat([inv_feb, inv_mar], 
          verify_integrity=False)
     cid  invoice_date  total
iid 
7    38   2009-02-01    1.98 
8    40   2009-02-01    1.98 
9    42   2009-02-02    3.96 
9    17   2009-03-04    1.98 
15   19   2009-03-04    1.98 
16   21   2009-03-05    3.96
使用 pandas 進行資料表連接

為何要驗證完整性與後續處理

原因:

  • 真實世界的資料常常「不」乾淨

要做什麼:

  • 修正錯誤資料
  • 刪除重複列
使用 pandas 進行資料表連接

一起來練習吧!

使用 pandas 進行資料表連接

Preparing Video For Download...