iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

Pandas|資料前處理工具 系列 第 17

Day 17|資料合併的三種常用語法

  • 分享至 

  • xImage
  •  

  在茫茫數據海當中,資料散布在各種不同的地方,可能是資料庫、網站、文件等,為了要有效統一資料集,方便後續的分析和報告,資料合併的操作是不可不學的,以下將以案例和大家分享資料合併的三種常用語法,內容包含:

  1. 水平或垂直合併:concat( )
  2. 關聯合併:merge( )join( )

■ 方法|水平合併與垂直合併

使用 Pandas 提供的 concat( [data], axis = 0 或 1, ignore_index = True 或 False) 合併多個 DataFrame 物件。

  • 參數 axis 指定行或列,預設 axis = 0,依據列(row)合併。
  • 參數 ignore_index 決定是否忽略索引值,預設為 False 不忽略。

1. 水平合併:多個資料集內的欄位相同,合併列(row)的資料
(1) 舉例:合併不同來源的顧客資料
https://ithelp.ithome.com.tw/upload/images/20231002/20162238iVA6j79fD6.jpg
(2) 程式碼:

import pandas as pd
data_1 = {'name':['Alan','Joseph','Wennie'],
          'gender':['M','M','F'],
          'city':['Taipei','Hualien','Hsinchu']}
data_2 = {'name':['Ruby','Chris','Tanya'],
          'gender':['F','M','F'],
          'city':['Taoyuan','Kaohsiung','Taichung']}
df1 = pd.DataFrame(data_1)
df2 = pd.DataFrame(data_2)
# 水平合併df1和df2,並且忽略索引值
con = pd.concat([df1,df2],ignore_index=True)
print(con)

(3) 輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231002/20162238CfgQNd6ZfM.png

2. 垂直合併:多個資料集內的欄位皆不同,合併行(column)的資料
(1) 舉例:合併公司不同的顧客資料
https://ithelp.ithome.com.tw/upload/images/20231002/20162238HkjzfHR6Ic.jpg
(2) 程式碼:

import pandas as pd
data_1 = {'name':['Alan','Joseph','Wennie','Ruby','Chris'],
          'gender':['M','M','F','F','M'],
          'city':['Taipei','Hualien','Hsinchu','Taoyuan','Kaohsiung']}
data_2 = {'age':[68,23,32,50,40],
          'marital status':['married','single','married','married','single']}
df1 = pd.DataFrame(data_1)
df2 = pd.DataFrame(data_2)
# 垂直合併df1、df2
con = pd.concat([df1,df2],axis=1)

(3) 輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231002/20162238IATJFqK5j5.png

■ 方法|關聯合併

1.使用 Pandas 提供的 merge( data, on = '欄位名稱') 在有相同欄位之下合併兩個資料集

(1) 舉例:依據姓名欄位,合併公司的顧客資料和銷售資料
https://ithelp.ithome.com.tw/upload/images/20231002/20162238OKuUliIW0V.jpg

(2) 程式碼:

import pandas as pd
data_1 = {'name':['Alan','Joseph','Wennie','Ruby','Chris'],
          'gender':['M','M','F','F','M'],
          'city':['Taipei','Hualien','Hsinchu','Taoyuan','Kaohsiung']}
data_2 = {'name':['Alan','Joseph','Wennie','Ruby','Chris'],
          'date':['2023/09/28','2023/09/10','2023/09/28','2023/09/23','2023/09/17'],
          'item':['rice cooker','air fryer','oven','refrigerator','electric fan']}
customer = pd.DataFrame(data_1)
sales = pd.DataFrame(data_2)
# 依據name欄位,合併customer、sales兩個資料
new = pd.merge(customer,sales,on='name')
print(new)

(3) 輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231002/20162238s75Mp6WLTJ.png

2.使用 Pandas 提供的 join() 將兩個資料集按照索引合併

(1) 舉例:以姓名為索引值,合併兩個資料集
https://ithelp.ithome.com.tw/upload/images/20231002/20162238s9O4NmxTss.jpg

(2) 程式碼:

import pandas as pd
data_1 = {'gender':['M','M','F','F','M'],
          'city':['Taipei','Hualien','Hsinchu','Taoyuan','Kaohsiung']}
df1 = pd.DataFrame(data_1,index=['Alan','Joseph','Wennie','Ruby','Chris'])
data_2 = {'age':[32,42,68,50,23],
          'marital status':['married','single','married','married','single']}
df2 = pd.DataFrame(data_2,index=['Wennie','Chris','Alan','Ruby','Joseph'])
# 合併df1和df2
new = df1.join(df2)
print(new)

(3) 輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231002/20162238Ysw1UPdotY.png

■ 結語

善用 concat()merge()join() 三種資料合併操作,就算資料散落各處,也能輕鬆搞定!如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱唷!

我是 Eva,一位正在努力跨進資料科學領域的女子!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】


上一篇
Day 16|自定義轉換必學的apply()函數
下一篇
Day 18|資料的分組和聚合
系列文
Pandas|資料前處理工具 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言