跳到主要內容

[Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)

pandas_data_cleaning

在資料分析的過程中,蒐集來的大量數據很可能不是那麼完整,像是含有空值、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_data_cleaning

這時候遺漏資料的清理,可以利用Pandas套件的以下方法(Method):

  • dropna():只要該筆資料有遺漏就刪除。

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df.dropna(inplace=True)  #inplace=True為取代原pandas dataframe的意思
print(df)

截取部分執行結果

pandas_data_cleaning

  • dropna(how='all'):該筆資料的所有欄位皆遺漏才刪除。(這邊筆者為了示範,在mycsvfile.csv檔案新增一筆所有欄位皆遺漏的資料,如下圖)
pandas_data_cleaning
在dropna()方法(Method)加上how='all'關鍵字參數,就可以將這筆所有欄位皆遺漏的資料刪除,如下範例:

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df.dropna(how='all', inplace=True)
print(df)

截取部分執行結果

pandas_data_cleaning

從以上結果可以看到,剛剛所新增的資料已被刪除,而剩下的每筆資料皆只遺漏一個欄位值,不是所有欄位皆遺漏,所以並不會被刪除。

除此之外,在某些情況下,為了保留資料的原始性,該筆資料有遺漏但並不想要刪除,而是填入自訂的預設值來補齊,則能夠使用以下的Pandas套件方法(Method):

  • fillna(value=預設值):該筆資料遺漏的部分填入自訂預設值。

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df.fillna(value='unknown', inplace=True)
print(df)

截取部分執行結果

pandas_data_cleaning

二、Pandas重複資料清理

顧名思義,就是資料集中有一模一樣的資料,如果想要進行刪除,使用以下的Pandas套件方法(Method)即可達成:

  • drop_duplicates():刪除一模一樣的資料。(這邊筆者為了示範,在mycsvfile.csv檔案新增一筆一模一樣的資料,如下圖)

pandas_data_cleaning
接下來,利用drop_duplicates()方法(Method)刪除這筆重複的資料,如下範例

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df.drop_duplicates(inplace=True)
print(df)

截取部分執行結果

pandas_data_cleaning

從執行結果可以看到,筆者所新增的重複資料已被刪除,預設會保留重複資料的第一筆。

而另一個常見的應用情況是某些特定欄位,只要一樣的話就刪除或僅保留一筆。舉例來說,各個國家相同的影片類型資料保留一筆就好,也就是影片類型(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)

截取部分執行結果

pandas_data_cleaning
這時候,每筆資料的影片類型(type)與國家(country)兩個欄位值,就不會重複了。

當然,要符合剛剛的需求,國家(country)欄位因為有利用逗號組合了多個不同的值,所以並不精準,就會需要使用接下來要介紹的Pandas套件拆分資料方法來進行處理。

三、Pandas拆分欄位資料

當資料集的某一欄位擁有複合式資料,如下範例的導演(director)、演員(cast)、國家(country)與分類(listed_in)欄位:

pandas_data_cleaning

或資料內容過多,如下範例的描述(decription)欄位

pandas_data_cleaning

為了方便未來的搜尋與分析,就可以利用以下的Pandas套件方法(Method)來拆分其中的資料:

  • str():截取欄位資料的部分字串。

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df['summary'] = df.description.str[0:31]
print(df)

截取部分執行結果

pandas_data_cleaning

以上範例截取描述(decription)欄位的前30個字,當作摘要(summary)新欄位的值。

  • split():以分隔符號來拆分資料。

import pandas as pd

df = pd.read_csv('mycsvfile.csv')
df['listed'] = df.listed_in.str.split(',')
print(df)

截取部分執行結果

pandas_data_cleaning

以上範例使用分類(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_data_cleaning

四、小結

本文分享了在實務上利用Pandas套件進行資料清理時,幾個常見的應用情況,包含遺漏與重複資料的清理,以及複合式的欄位值該如何有效拆分,讓未來方便搜尋與精確分析,希望能夠幫助大家快速上手Pandas套件的資料清理方法,下一篇文章還會接續分享更多實作,別忘了訂閱追蹤唷。

如果您喜歡我的文章,請幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

Python學習資源









留言