在對資料集進行分析的過程中,有時並不是所有的資料內容都符合需求,往往會透過條件篩選的方式,取得部分資料集來觀察與操作,除了能有更多的變化應用外,也可以對資料有更深入的理解。
所以在學習Pandas套件時,如何篩選出符合自己需求的資料就是一大重點,本文利用Kaggle網站的星巴克滿意度調查資料集(Starbucks satisfactory survey.csv),來和大家分享Pandas套件篩選資料的常見語法應用,包含:
- Pandas單一條件篩選資料
- Pandas多條件篩選資料
- Pandas篩選字串資料
一、Pandas單一條件篩選資料
由於Kaggle網站的星巴克滿意度調查資料集(Starbucks satisfactory survey.csv)是以問卷的形式來蒐集資料,所以下載後會看到欄位標題皆為問題,為了讓Pandas套件後續能方便存取欄位,大家可以將其修改為精簡的標題,筆者修改後的結果與說明如下圖:
接下來,利用Pandas套件的read_csv()方法(Method)來讀取,如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') print(df)
截取部分執行結果
假設,我們想要篩選出職業為學生的資料集,就可以像邏輯判斷式一樣,存取Job(職業)欄位,並且指定條件,接著,放入Pandas套件的loc[]語法中來進行篩選,如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = (df['Job'] == 'Student') print(df.loc[filt])
截取部分執行結果
在篩選出所需的資料後,有時並不會想要看到那麼多欄位,而是少部分的特定欄位資料,就可以在Pandas套件的loc[]語法第二個參數,加上想要檢視的欄位標題串列(List),如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = (df['Job'] == 'Student') print(df.loc[filt, ['Job', 'VisitFrequency', 'EnjoyType']])
截取部分執行結果
二、Pandas多條件篩選資料
除此之外,當有一個篩選條件以上的情況時,就可以使用Pandas套件的邏輯運算子,包含「 & (And)」與「 | (Or)」,來串接多個條件。
舉例來說,我們想要篩選出學生擁有星巴克會員的資料,也就是Job(職業)欄位為Student且(And) MembershipCard(會員卡)欄位為Yes,兩個條件皆符合的資料集,如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = (df['Job'] == 'Student') & (df['MembershipCard'] == 'Yes') print(df.loc[filt])
截取部分執行結果
從執行結果可以看到,每一筆資料都符合指定的兩個條件。
同樣的,想要針對特定欄位來檢視資料,在Pandas套件的loc[]語法第二個參數加上欄位標題串列(List)即可,如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = (df['Job'] == 'Student') & (df['MembershipCard'] == 'Yes') print(df.loc[filt, ['Job', 'MembershipCard', 'VisitFrequency']])
截取部分執行結果
另一方面,如果將以上Pandas套件的 & (And)邏輯運算子換成 | (Or),意思就會變成只要是學生或(Or)擁有星巴克會員,符合一個條件的資料就篩選出來,如下範例第6行:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = (df['Job'] == 'Student') | (df['MembershipCard'] == 'Yes') print(df.loc[filt, ['Job', 'MembershipCard', 'VisitFrequency']])
截取部分執行結果
雖然Pandas套件的邏輯運算子能夠串接許多條件式,但是過多的條件,就會讓語法過長,使得可讀性降低,該怎麼辦呢?
Pandas套件的isin()方法(Method)就能夠協助解決這個問題。假設想要篩選出Job(職業)為學生(Student)、就業人員(Employed)與自顧者(Self-employed)的資料,這時候可以將這些想要的值定義在一個串列(List)中,再運用Pandas套件的isin()方法(Method)來判斷欄位資料是否有所包含,如下範例:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt_value = ['Employed', 'Self-employed', 'Student'] #想要的值 filt = df['Job'].isin(filt_value) #篩選Job欄位有filt_value串列中的資料 print(df.loc[filt, ['Job', 'MembershipCard', 'VisitFrequency']])
截取部分執行結果
三、Pandas篩選字串資料
針對資料內容較多的情況下,想要以關鍵字的方式來篩選資料,則可以利用Pandas套件的字串方法(Method),如下範例第6行:
import pandas as pd df = pd.read_csv('Starbucks satisfactory survey.csv') filt = df['PromotionsChannel'].str.contains('Social Media', na=False) print(df.loc[filt, ['Job', 'PromotionsChannel']])
截取部分執行結果
而其中第二個參數na=False,意思是如果欄位中有NaN的資料時,就不作任何的動作,否則沒有設定的話,當欄位中有NaN的資料就會發生錯誤。
四、小結
篩選資料可以說是在分析時,最常會使用到的操作方式,而本文透過幾個簡單範例,讓大家瞭解Pandas套件如何自訂條件與使用關鍵字,來篩選出符合需求的資料集,進而有效應用在適當的情境。
當然,Pandas套件篩選資料的方法還很多,大家都是使用什麼方法呢?或是喜歡本文的哪一個應用範例?歡迎在底下留言和我分享唷~
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [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處理單維度資料方法
留言
張貼留言