遺漏值(Missing Value)的處理可以說是在資料清理的過程中,不可或缺的步驟之一,而Pandas套件也提供了許多實用的方法(Method),讓分析人員能夠有效的探索與檢視遺漏值(Missing Value),並且進行適當的處理。
所以,本文以Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv)為例,來和大家分享筆者在處理遺漏值(Missing Value)時,常用的Pandas套件方法(Method),包含:
- Pandas 探索遺漏值(Missing Value)
- Pandas檢視遺漏值(Missing Value)
- Pandas dropna()方法(Method)
- Pandas fillna()方法(Method)
一、Pandas 探索遺漏值(Missing Value)
首先,利用Pandas套件的read_csv()方法(Method),來瞭解一下Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv)內容,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df)
擷取部分執行結果
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.isnull())
執行結果
但是這樣並沒有辦法讓我們快速瞭解每個欄位的遺漏值(Missing Value)狀況,這時候就可以搭配使用Pandas套件的sum()方法(Method),將每個欄位進行加總,瞭解每個欄位的遺漏值(Missing Value)個數,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.isnull().sum())
執行結果
二、Pandas檢視遺漏值(Missing Value)
探索了每個欄位的遺漏值(Missing Value)個數後,如果想要特別檢視特定欄位的遺漏值(Missing Value)資料內容,就可以利用以下的Pandas套件篩選語法:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df[df.date_added.isnull()])
執行結果
以上範例,就是檢視date_added(新增日期)欄位的11筆遺漏值(Missing Value)資料內容。
三、Pandas dropna()方法(Method)
接下來,就可以針對遺漏值(Missing Value)的資料進行處理,而最常見的就是移除的動作,為了讓讀者檢視資料筆數的變化,先利用Pandas套件的shape屬性來看一下資料集的形式,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.shape)
執行結果
(6234, 12)
從執行結果可以知道,這個資料集有6234筆資料及12個欄位,如果要移除遺漏值(Missing Value)的資料,Pandas套件提供了dropna()方法(Method)來因應不同的需求,包含:
- dropna(how='any'):任一欄位有遺漏值(Missing Value)的資料就移除,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.dropna(how='any').shape)
執行結果
(4265, 12)
- dropna(how='all'):所有欄位皆有遺漏值(Missing Value)的資料就移除,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.dropna(how='all').shape)
執行結果
(6234, 12)
由於剛剛在探索每個欄位的遺漏值(Missing Value)個數中,只有兩個欄位有遺漏值(Missing Value),所以在進行此操作後,總資料筆數不變。
- dropna(subset=['欄位名稱', ...], how='any'):任一個指定的欄位有遺漏值(Missing Value)的資料就移除,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.dropna(subset=['director', 'date_added'], how='any').shape)
執行結果
(4265, 12)
- dropna(subset=['欄位名稱', ...], how='all'):指定的欄位皆有遺漏值(Missing Value)的資料就移除,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.dropna(subset=['director', 'date_added'], how='all').shape)
執行結果
(6223, 12)
PS.大家可以搭配第一節探索的每個欄位遺漏值(Missing Value)個數,來觀察執行各個dropna()方法(Method)後的資料筆數變化。
四、Pandas fillna()方法(Method)
另一個遺漏值(Missing Value)資料的處理方式,就是填入自訂的值,這時候就能利用Pandas套件的fillna()方法(Method),指定value關鍵字參數(Keyword Argument)為想要填入的值即可,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['director'].fillna(value='Not Found', inplace=True) print(df.head(10)) #取前10筆
執行結果
以上範例,將director(導演)欄位的遺漏值(Missing Value)資料填入「Not Found」,並且設定inplace關鍵字參數(Keyword Argument)為True,覆寫原Pandas DataFrame中的內容。
五、小結
本文整理了Pandas套件對遺漏值(Missing Value)資料的常見處理方式,首先,透過計算遺漏值(Missing Value)個數,探索每個欄位資料的遺漏狀況,接著,利用Pandas套件的篩選語法檢視詳細的遺漏值(Missing Value)資料,最後,利用Pandas套件的dropna()或fillna()方法(Method),來移除遺漏值(Missing Value)資料或填入自訂的值。
大家手邊有資料集的話,不妨依照本文的教學,來練習清理遺漏值(Missing Value)資料吧。
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [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處理單維度資料方法
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYqMPD_mPLEileg1IdrsIYhFSWZkYFKYmEnUqWqiqdiJv2XYnkT23CFcXoTN6HBtGCEUylgVoUIVKm6KPRPM_TjcjsSei4lGE_YmZdrWA6Ulw1fp6-o8Cn-bVwr7_FANFoC4tjTe-ak6w-atFYq-a1pipQbZvQzt4wHRNK7tywcSG0dSCnpJpqoMP5wA/s1600/Python%E7%B6%B2%E9%A0%81%E7%88%AC%E8%9F%B2%E5%85%8D%E8%B2%BB%E7%B7%9A%E4%B8%8A%E5%9F%B9%E8%A8%93.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-fK9Da5M7X1lSpbZVan4Eo-PunVnQv-YHw3EDahTUhZr5FayVLaCPqrW44W3_xwQQO-gAWZEwe_A-SxL_nltT__ArbFOgLYAAIsi3RzETT9GqVsfyfN9PXDs-xGTkxZSqj_W1SCxwD2UcrJLqHZSYIrLB-HIU75vSom4YoqoWFUQz_o4PbnvTQUbE6Bab/w640-h426/2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61JC7N1hyphenhyphenPpzb1hNJauunevoWrOsJxk_Upz0ywnLtIAJ2rdd1ZxChyphenhyphenFPq8GHYfywtHv2mTce5NGdwwxWFWYARhA6In0xlOzkwlRb9kM04mwgdy9Un9JgVCoLQnwV25oUcitQy2OY4TeA3gVIs067wR4StGfkldbykOeL3TfPchWfNClWKhL10ZzWaxFtf/w640-h426/3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh1XFQE0AmkZHSFB0Icq3uY4_FdsIYZ9nUqllOlo9ulRu0ri-LS1OeW2ybKOO2QRg-gyUOUr_3sMLYf7S4Q5ULZpIcXsS1pAkSMPm0OwqpbnLET51WEpQ3EoY5WaEVEWyTixBkRqp2tA7SpePM_MCIY6tnyUvu917rulqbLJTEEPsEho6Q-4Tf74DFdakd/w640-h426/4.png)
留言
張貼留言