其中,最常見的基本資料問題,包含「資料型態」、「資料範圍」及「重複資料」,本文就先針對「資料型態」,來和大家分享如何有效找出髒資料(Dirty Data),並且利用Pandas套件來進行資料處理或清理,避免髒資料(Dirty Data)導致分析的副作用:
- Pandas數字資料型態處理
- Pandas類別資料型態(category)處理
一、Pandas數字資料型態處理
在讀取資料集時,Pandas套件都會自動判定欄位的資料型態,這時候,當其中的資料含有髒資料(Dirty Data),就會發生誤判的情況,導致後續分析或計算的錯誤。
這邊以Kaggle網站的ASUS筆電資料集(AsusLaptops.csv)為例,讀取後如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df)
執行結果
接下來,使用Pandas套件的info()方法(Method),來查看各欄位的資料型態,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df.info())
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df['Warrenty'].sum())
'1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y2Y1Y1Y1Y1Y1Y2Y1Y2Y1Y1Y1Y2Y1Y2Y2Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y1Y'
會導致Pandas套件誤判,就是因為「Warranty保固期欄位」中,包含了數字以外的髒資料(Dirty Data),造成Pandas套件無法以數字型態進行加總。
而資料清理的方法,就是利用Pandas套件的strip()清除前後字串方法(Method),移除Y字串,再透過astype()方法(Method)將欄位轉型為int(整數),如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串 df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數
接下來,可以利用assert陳述式來驗證欄位型態,如果沒有錯誤訊息,代表驗證的條件成立,反之,則會顯示錯誤訊息,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串 df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數 assert df['Warrenty_Year'].dtype == 'int'
這時候,將「Warranty保固期欄位」進行加總,就會得到正確的計算結果,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #新建欄位移除Y字串 df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #新建欄位將去除字串的欄位轉型為int整數 assert df['Warrenty_Year'].dtype == 'int' #驗證欄位資料型態 print(df['Warrenty_Year'].sum()) #執行結果99
二、Pandas類別資料型態(category)處理
在實作機器學習或分類資料的時候,有時會以數字來分別表示不同類別的資料。
同樣以Kaggle網站的ASUS筆電資料集(AsusLaptops.csv)為例,為了進行示範,Mike將「Category筆電類別欄位」利用以下三個數字表示:
- 0-其他
- 1-Premium
- 2-Platinum
Pandas讀取資料集後,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df)
執行結果
而各欄位的資料型態,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df.info())
執行結果
可以看到Pandas套件判定「Category筆電類別欄位」為int64(整數)型態,當利用Pandas套件的describe()方法(Method)進行摘要性統計的時候,就會看到數字型態的統計結果,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') print(df['Category'].describe())
執行結果
但事實上,「Category筆電類別欄位」為類別資料型態(category),如果沒有將欄位進行轉型,就有可能誤導後續的操作或統計。
解決方法,可以使用Pandas套件的astype()方法(Method),將「Category筆電類別欄位」轉型為類別型態(category),這時候,再透過describe()方法(Method)來查看摘要性統計的時候,就會是類別型態(category)的統計結果,如下範例:
import pandas as pd df = pd.read_csv('AsusLaptops.csv') df['Category'] = df['Category'].astype('category') #轉型 print(df['Category'].describe())
執行結果
三、小結
以上就是在進行資料分析的過程中,常見的資料型態問題,本文和大家分享了利用Pandas套件的info()方法(Method),來查看各欄位的資料型態是否與需求相符,如果其中含有髒資料(Dirty Data),可以使用strip()方法(Method)進行資料清理,以及透過astype()方法(Method)轉型為正確的資料型態。
本文是筆者Mike在DataCamp平台上所學到的Pandas套件資料清理技巧,加以應用和大家分享。DataCamp平台上有非常多與資料科學、分析有關的教學,包含資料視覺化、清理、機器學習等,並且有專家帶領你完成資料分析專案,大家有興趣的話,可以加入DataCamp平台一起學習唷。
在下一篇文章中,將會接續和大家分享資料範圍(Data Range)問題,並且該如何有效利用Pandas套件進行資料清理 :)
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [Pandas教學]使用Pandas套件將資料集拆分成多個CSV檔案資料應用
- [Pandas教學]3個Pandas套件比較CSV檔案資料之間的差異秘訣
- [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處理單維度資料方法
留言
張貼留言