所以,本文接續[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處理單維度資料方法
留言
張貼留言