在資料分析的過程中,蒐集來的大量數據很可能不是那麼完整,像是含有空值、NULL或重複等,這時候就需要適當的清理與處理,讓資料集更符合所需,進而能夠精確的分析。
而Pandas套件提供了許多資料清理的方法(Method),本文就以Kaggle網站的「Netflix data with IMDB scores added」資料集(mycsvfile.csv)為例,來和大家分享這些方法(Method)的應用方式,包含:
- Pandas遺漏資料清理
- Pandas重複資料清理
- Pandas拆分欄位資料
一、Pandas遺漏資料清理
遺漏資料泛指該筆資料含有空值、NULL或NaN等缺漏,如下範例:
import pandas as pd df = pd.read_csv('mycsvfile.csv') print(df)
截取部分執行結果
這時候遺漏資料的清理,可以利用Pandas套件的以下方法(Method):
- dropna():只要該筆資料有遺漏就刪除。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df.dropna(inplace=True) #inplace=True為取代原pandas dataframe的意思 print(df)
截取部分執行結果
- dropna(how='all'):該筆資料的所有欄位皆遺漏才刪除。(這邊筆者為了示範,在mycsvfile.csv檔案新增一筆所有欄位皆遺漏的資料,如下圖)
import pandas as pd df = pd.read_csv('mycsvfile.csv') df.dropna(how='all', inplace=True) print(df)
截取部分執行結果
從以上結果可以看到,剛剛所新增的資料已被刪除,而剩下的每筆資料皆只遺漏一個欄位值,不是所有欄位皆遺漏,所以並不會被刪除。
除此之外,在某些情況下,為了保留資料的原始性,該筆資料有遺漏但並不想要刪除,而是填入自訂的預設值來補齊,則能夠使用以下的Pandas套件方法(Method):
- fillna(value=預設值):該筆資料遺漏的部分填入自訂預設值。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df.fillna(value='unknown', inplace=True) print(df)
截取部分執行結果
二、Pandas重複資料清理
顧名思義,就是資料集中有一模一樣的資料,如果想要進行刪除,使用以下的Pandas套件方法(Method)即可達成:
- drop_duplicates():刪除一模一樣的資料。(這邊筆者為了示範,在mycsvfile.csv檔案新增一筆一模一樣的資料,如下圖)
import pandas as pd df = pd.read_csv('mycsvfile.csv') df.drop_duplicates(inplace=True) print(df)
截取部分執行結果
從執行結果可以看到,筆者所新增的重複資料已被刪除,預設會保留重複資料的第一筆。
而另一個常見的應用情況是某些特定欄位,只要一樣的話就刪除或僅保留一筆。舉例來說,各個國家相同的影片類型資料保留一筆就好,也就是影片類型(type)與國家(country)兩個欄位的資料,相同的話僅保留一筆,就可以使用以下的Pandas方法(Method):
- drop_duplicates([column_name,...]):指定的欄位資料重複就刪除。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df.drop_duplicates(['type', 'country'], inplace=True) print(df)
截取部分執行結果
當然,要符合剛剛的需求,國家(country)欄位因為有利用逗號組合了多個不同的值,所以並不精準,就會需要使用接下來要介紹的Pandas套件拆分資料方法來進行處理。
三、Pandas拆分欄位資料
當資料集的某一欄位擁有複合式資料,如下範例的導演(director)、演員(cast)、國家(country)與分類(listed_in)欄位:
或資料內容過多,如下範例的描述(decription)欄位:
為了方便未來的搜尋與分析,就可以利用以下的Pandas套件方法(Method)來拆分其中的資料:
- str():截取欄位資料的部分字串。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['summary'] = df.description.str[0:31] print(df)
截取部分執行結果
以上範例截取描述(decription)欄位的前30個字,當作摘要(summary)新欄位的值。
- split():以分隔符號來拆分資料。
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['listed'] = df.listed_in.str.split(',') print(df)
截取部分執行結果
以上範例使用分類(listed_in)欄位為例,利用逗號來分隔資料後,存放在清單(listed)新欄位,可以看到為串列(List)的資料型態,如果要把其中的資料再分別放到不同欄位,則可以搭配Pandas套件的get()方法(Method):
import pandas as pd df = pd.read_csv('mycsvfile.csv') df['listed'] = df.listed_in.str.split(',') df['listed1'] = df.listed.str.get(0) df['listed2'] = df.listed.str.get(1) print(df)
截取部分執行結果
四、小結
本文分享了在實務上利用Pandas套件進行資料清理時,幾個常見的應用情況,包含遺漏與重複資料的清理,以及複合式的欄位值該如何有效拆分,讓未來方便搜尋與精確分析,希望能夠幫助大家快速上手Pandas套件的資料清理方法,下一篇文章還會接續分享更多實作,別忘了訂閱追蹤唷。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
留言
張貼留言