跳到主要內容

[Pandas教學]3個Pandas套件比較CSV檔案資料之間的差異秘訣

pandas_compare_values_between_dataframes

使用Pandas套件處理多份CSV檔案資料,相信是資料分析的過程中不可或缺的任務之一,其中,很常有機會比較各個資料集的相同與不相同資料內容,藉此來瞭解差異或檢核資料整合的結果是否有誤。

所以,本文就以Kaggle網站的「Coursera Course Dataset(coursea_data.csv)」及Course Reviews on Coursera(Coursera_courses.csv)兩個資料集為例,來分享3個Pandas套件比較CSV檔案資料集的常用方法,包含:

  • Pandas檢查兩個資料集的資料是否相同
  • Pandas查找兩個資料集之間的相同資料
  • Pandas查找兩個資料集之間的相異資料

一、Pandas檢查兩個資料集的資料是否相同

首先,利用以下指令安裝Pandas套件

$ pip install pandas

接著,使用Pandas套件的read_csv()方法(Method),來讀取Coursera Course Dataset(coursea_data.csv)資料集,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv')

print(df1)

截取部分執行結果

pandas_compare_values_between_dataframes

以及讀取Course Reviews on Coursera(Coursera_courses.csv)資料集,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv')

df2 = pd.read_csv('Coursera_courses.csv')

print(df2)

執行結果

pandas_compare_values_between_dataframes

這時候,就可以透過Pandas套件的equals()方法(Method),來比較兩個資料集是否有相同的維度(shape)、資料型態(dtype)及資料內容(elements),如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv')

df2 = pd.read_csv('Coursera_courses.csv')

print(df1.equals(df2))  #執行結果False

很明顯這兩個資料集的維度(shape)並不相同,所以執行結果為False。

二、Pandas查找兩個資料集之間的相同資料

知道了兩個資料集不相同後,有時會想要知道兩個資料集皆擁有的資料(交集)有哪些,在這樣的情況下,就能夠使用Pandas套件的merge()方法(Method),透過合併的方式來進行查找。

而Pandas套件在合併兩個資料集時,至少要有一個共同的欄位名稱,所以本文就將第一個資料集的「course_title」課程名稱欄位重新命名為「name」,來當作和第二個資料集合併的共同欄位,如下範例第4行

import pandas as pd


df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})

df2 = pd.read_csv('Coursera_courses.csv')

接下來,就可以利用Pandas套件的merge()方法(Method)進行合併,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})

df2 = pd.read_csv('Coursera_courses.csv')

result = df1.merge(df2, how='inner')

print(result)

截取部分執行結果

pandas_compare_values_between_dataframes

由於我們想要查找兩個資料集皆擁有的資料,也就是所謂的交集,所以在Pandas套件的merge()方法(Method)中,需設定how關鍵字參數(Keyword Argument)為「inner」,即可得到兩個資料集的相同資料結果。

三、Pandas查找兩個資料集之間的相異資料

相反的,如果想要知道兩個資料集不相同的資料,就分為「左邊(Left)有而右邊(Right)沒有」及「左邊(Left)沒有而右邊(Right)有」的情況。

同樣使用Pandas套件的merge()方法(Method),設定how關鍵字參數(Keyword Argument)為「outer」,即可查找出兩個資料集的相異資料,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})

df2 = pd.read_csv('Coursera_courses.csv')

result = df1.merge(df2, how='outer', indicator=True)

print(result)

截取部分執行結果

pandas_compare_values_between_dataframes

其中,第8行的indicator=True,就是在執行結果的最後一欄(_merge),標示出兩個資料集的比較結果,包含:

  • left_only:左邊資料集有而右邊資料集沒有的資料
  • right_only:左邊資料集沒有而右邊資料集有的資料
  • both:兩邊資料集皆擁有的資料

所以,想要查找出「左邊(Left)有而右邊(Right)沒有」的資料,利用Pandas套件的loc[]語法,篩選出「_merge」欄位為left_only即可,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})

df2 = pd.read_csv('Coursera_courses.csv')

result = df1.merge(df2, how='outer', indicator=True).loc[lambda x : x['_merge'] == 'left_only']

print(result)

截取部分執行結果

pandas_compare_values_between_dataframes

「左邊(Left)沒有而右邊(Right)有」的資料,則篩選出「_merge」欄位為right_only,如下範例

import pandas as pd


df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})

df2 = pd.read_csv('Coursera_courses.csv')

result = df1.merge(df2, how='outer', indicator=True).loc[lambda x : x['_merge'] == 'right_only']

print(result)

截取部分執行結果

pandas_compare_values_between_dataframes

四、小結

本文介紹了如何利用Pandas套件的equals()及merge()方法(Method),來有效比較兩個CSV檔案之間的資料,並且查找出相同與不相同的資料集,除了可以快速瞭解兩個資料集之間的關係,對於經過複雜運算後的Pandas DataFrame,也能夠檢核處理的結果是否正確。

大家是否也有比較多份CSV檔案資料的經驗呢?歡迎在底下留言和我分享其中所使用的技巧唷~

如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

Python學習資源

Python網頁爬蟲推薦課程
Pandas資料分析教學









留言