資料合併:初探merge用法

更新於 發佈於 閱讀時間約 4 分鐘
raw-image

雖然之前用爬蟲的時候有用過Pandas來處理過爬到的表格,但對Pandas應該只能算是一知半解,每次遇到不會就是上網查語法要怎麼寫,而且查的次數好像有點多,想了想自己是沒有好好地學Pandas的各種使用方法,著實浪費了他的強大功能,所以就從merge來開始吧!

接下來的用字遣詞可能不是很專業(可能可以把可能拿掉XD),主要是我對每個語法的個人理解,除了用來紀錄自己的想法,也順便當作分享。


Merge

merge是用來合併兩個有共同欄 (column)的dataframe的方法

首先我先創建兩個略有不同的dataframe,方便後續理解每個方法和參數。

import pandas as pd

# 創建一個公司代號和價格對應的dataframe
price = pd.DataFrame(
{
"stockID": ["2330", "0050", "006208", "1268"],
"price": ["1085", "196.95", "115.60", "152.5"]
}
)

# 創建一個公司代號和漲跌幅對應的dataframe
change = pd.DataFrame(
{
"stockID": ["2330", "0050", "006208", "1217"],
"change": ["2.36%", "1.52%", "1.40%", "0.41%"]
}
)

就會得到以下這兩個dataframe:

price(左)和change(右)

price(左)和change(右)

如何合併?

直接合併

df = pd.merge(price, change)
raw-image

merge可以直接使用來達到合併dataframe的作用,從輸出結果可以得知預設是取兩者的交集。那如果把括號裡的順序對調呢?

df = pd.merge(change, price)
raw-image

可以發現change和price這兩欄的先後順序變了,但整體是沒有變化的!

指定要以誰為基準合併

上述的直接合併,其實也可以寫成以下的樣子:

df = price.merge(change)

以price為基準,將change合併到price。

關於how這個參數

how這個參數有以下4種不同的值:

  1. inner(預設)
  2. outer
  3. left
  4. right

inner(預設)

  • inner是how的預設值,代表將兩者取「交集」,不特別指定的時候merge就會採用inner來對dataframe進行合併。

outer

  • outer代表將兩者取「聯集」,兩個dataframe的所有欄位在合併後都會被保留下來,而空值的部分則會被NaN填充。
df = price.merge(change, how="outer")
how的值為outer時,保留了price和change中的所有欄位,空值以NaN填充。

how的值為outer時,保留了price和change中的所有欄位,空值以NaN填充。

left

  • left代表保留第一個(我理解為程式碼中「左邊」那個)dataframe中的所有欄位,並將右邊那個dataframe合併後的空值以NaN填充。
df = price.merge(change, how="left")
how的值為left時,price的所有欄位都被保留,而change中因為沒有stockID=1268所對應的資料,因此被NaN填充。

how的值為left時,price的所有欄位都被保留,而change中因為沒有stockID=1268所對應的資料,因此被NaN填充。

right

  • 和left相反,right代表保留第二個(我理解為程式碼中「右邊」那個)dataframe中的所有欄位,並將左邊那個dataframe合併後的空值以NaN填充。
df = price.merge(change, how="right")
how的值為left時,和為left時的結果正好完全相反。

how的值為left時,和為left時的結果正好完全相反。



以上就是merge最基本的用法和參數how的理解,希望能對和我一樣有時候看不太懂某些說明的人有些幫助。





留言
avatar-img
留言分享你的想法!
旅人小萌-avatar-img
2025/02/17
謝謝您的分享❤️
avatar-img
施政宇的沙龍
0會員
3內容數
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
如何用Python將DataFrame中的資料擷取維新的DataFrame?
Thumbnail
如何用Python將DataFrame中的資料擷取維新的DataFrame?
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,將資料表做樞紐轉換,垂直方向是月份,水平方向是不同的城市,而表格內容是該城市在某個月份的溫度。 題目的原文敘述 測試範例 Example 1: Input: +--------------+-
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,將資料表做樞紐轉換,垂直方向是月份,水平方向是不同的城市,而表格內容是該城市在某個月份的溫度。 題目的原文敘述 測試範例 Example 1: Input: +--------------+-
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News