所以,本文接續[Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)文章,使用Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv),針對資料型態與格式的部分,來和大家分享幾個Pandas套件提供的方法(Method)應用,包含:
- Pandas資料型態處理
- Pandas資料格式處理
- Pandas自訂函式清理資料
一、Pandas資料型態處理
首先,利用Pandas套件的dtypes屬性(Property)來檢視Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv)每個欄位資料型態,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df.dtypes)
執行結果
接下來,想要將欄位資料進行轉型,就可以使用Pandas套件的以下方法(Method):
- astype():欄位資料轉型為自訂的資料型態。需注意欄位資料不得含有特殊符號,否則會產生問題。如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['title'] = df['title'].astype('string') #將「標題」欄位轉型為字串 print(df.dtypes)
執行結果
- to_numeric():欄位資料轉型為數值。(這邊筆者為了示範,在mycsvfile.csv檔案新增一筆含有非數值的show_id資料,如下圖):
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['show_id'] = pd.to_numeric(df['show_id'], errors='coerce') #將「show_id」欄位轉型為數值 print(df)
- to_datetime():欄位資料轉型為日期。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['date_added'] = pd.to_datetime(df['date_added']) #將「新增日期」欄位轉型為日期 print(df.dtypes)
執行結果
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['date_added'] = pd.to_datetime(df['date_added']) #將「新增日期」欄位轉型為日期 print(df)
截取部分執行結果
二、Pandas資料格式處理
而資料格式的部分,由於從不同的資料來源蒐集,格式有時不一致或不符合分析需求,在這種情況下,就需要進行格式化的處理。其中,日期可以使用以下的Pandas套件方法(Method):
- to_datetime(欄位名稱).dt.strftime():將欄資料轉型為日期後,再進行格式化,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['date_added'] = pd.to_datetime(df['date_added']).dt.strftime('%Y/%m/%d') print(df)
截取部分執行結果
而數值型態的欄位,則可以利用以下的Pandas套件方法(Method):
- round(decimals=小數位數):四捨五入到自訂的小數位數。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['rating'] = df['rating'].round(decimals=0) #四捨五入到整數位 print(df)
截取部分執行結果
三、Pandas自訂函式清理資料
除了以上內建的資料清理方法(Method)外,還可以自訂函式封裝特殊的清理邏輯,再透過以下的Pandas套件方法(Method)套用到欄位資料中:
- apply():套用自訂的資料清理函式。
import pandas as pd #西元年轉為民國年 def convert_chinese_year(year): return int(year)-1911 df = pd.read_csv('mycsvfile.csv') df['release_year'] = df['release_year'].apply(convert_chinese_year) #套用自訂函式 print(df)
截取部分執行結果
當然,也適用Python的lambda匿名函式來處理欄位資料,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') #show_id欄位加上千分位符號 df['show_id'] = df['show_id'].apply(lambda x:format(x,',')) print(df)
截取部分執行結果
詳細的Python lambda語法教學可以參考[Python教學]Python Lambda Function應用技巧分享文章。
另外,如果想要在Pandas套件一讀取資料來源時,就進行資料型態與格式的處理,則可以在read_csv()方法(Method)加上converters關鍵字參數,如下範例:
import pandas as pd #西元年轉為民國年 def convert_chinese_year(year): return int(year)-1911 df = pd.read_csv('mycsvfile.csv', converters={ 'date_added': lambda x: pd.to_datetime(x), #「新增日期」轉為日期型態 'release_year': convert_chinese_year, #「上映年份」轉為民國年格式 'rating': lambda x:int(round(float(x), 0)) #「評價」欄位四捨五入且轉為整數型態 }) print(df)
截取部分執行結果
四、小結
本文分享了使用Pandas套件實作資料清理的過程中,資料型態與格式的處理方式,分別可以使用Pandas套件的內建方法(Method)或自訂函式,來提升資料清理的效率與彈性,希望對於想要入門Python資料清理的讀者有所幫助。
大家都是使用什麼方法來清理資料呢?或是有其它文中沒有提到的方法,都歡迎在底下留言和我分享交流唷~
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [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)
留言
張貼留言