使用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)
截取部分執行結果
以及讀取「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套件的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套件的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)
截取部分執行結果
- 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)
截取部分執行結果
而「左邊(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套件的equals()及merge()方法(Method),來有效比較兩個CSV檔案之間的資料,並且查找出相同與不相同的資料集,除了可以快速瞭解兩個資料集之間的關係,對於經過複雜運算後的Pandas DataFrame,也能夠檢核處理的結果是否正確。
大家是否也有比較多份CSV檔案資料的經驗呢?歡迎在底下留言和我分享其中所使用的技巧唷~
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [Pandas教學]利用Pandas套件的to_html方法在網頁快速顯示資料分析結果
- [Pandas教學]4個必學的Pandas套件處理遺漏值(Missing Value)資料方法
- [Pandas教學]有效利用Pandas套件的pipe方法打造資料處理流程管道
- [Pandas教學]3個優化Pandas套件讀取大型CSV檔案資料的技巧
- [Pandas教學]一定要學會的Pandas套件讀寫Google Sheets試算表資料秘訣
- [Pandas教學]客製化Pandas DataFrame樣式提升資料可讀性的實用方法
- [Pandas教學]3個Pandas套件合併多個CSV檔案資料的實用技巧
- Pandas教學]看完這篇就懂Pandas套件如何即時讀取API的回應資料
- [Pandas教學]快速掌握Pandas套件讀寫SQLite資料庫的重要方法
- [Pandas教學]輕鬆入門3個常見的Pandas套件排序資料方式
- [Pandas教學]有效利用Pandas套件篩選資料的應用技巧
- [Pandas教學]善用Pandas套件的Groupby與Aggregate方法提升資料解讀效率
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(下)
- Visual Studio Code漂亮印出Pandas DataFrame資料的實用方法
- [Pandas教學]資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
- [Pandas教學]5個實用的Pandas讀取Excel檔案資料技巧
- 解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率
- [Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧
- [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法
- [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法
留言
張貼留言