Mike的Python學院

Pandas、資料分析、Python

Mike Ku

Learn Code With Mike品牌創辦人

2021/11/23

有效利用Pandas套件篩選資料的應用技巧

本文利用Kaggle網站的星巴克滿意度調查資料集Starbucks satisfactory survey.csv( https://www.kaggle.com/mahirahmzh/starbucks-customer-retention-malaysia-survey ),來和大家分享Pandas套件篩選資料的常見語法應用。
Q:Pandas如何單一條件篩選資料?
假設,我們想要篩選出職業為學生的資料集,就可以像邏輯判斷式一樣,存取Job(職業)欄位,並且指定條件,接著,放入Pandas套件的loc[]語法中來進行篩選,如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = (df['Job'] == 'Student')
print(df.loc[filt])
在篩選出所需的資料後,有時並不會想要看到那麼多欄位,而是少部分的特定欄位資料,就可以在Pandas套件的loc[]語法第二個參數,加上想要檢視的欄位標題串列(List),如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = (df['Job'] == 'Student')
print(df.loc[filt, ['Job', 'VisitFrequency', 'EnjoyType']])
如此就能夠看出學生的星巴克拜訪頻率(VisitFrequency)與享用方式(EnjoyType)。
Q:Pandas如何多條件篩選資料?
除此之外,當有一個篩選條件以上的情況時,就可以使用Pandas套件的邏輯運算子,包含「 & (And)」與「 | (Or)」,來串接多個條件。
舉例來說,我們想要篩選出學生擁有星巴克會員的資料,也就是Job(職業)欄位為Student且(And) MembershipCard(會員卡)欄位為Yes,兩個條件皆符合的資料集,如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = (df['Job'] == 'Student') & (df['MembershipCard'] == 'Yes')
print(df.loc[filt])
從執行結果可以看到,每一筆資料都符合指定的兩個條件。同樣的,想要針對特定欄位來檢視資料,在Pandas套件的loc[]語法第二個參數加上欄位標題串列(List)即可,如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = (df['Job'] == 'Student') & (df['MembershipCard'] == 'Yes')
print(df.loc[filt, ['Job', 'MembershipCard', 'VisitFrequency']])
以上的執行結果就可以瞭解學生擁有星巴克會員的拜訪頻率(VisitFrequency)。另一方面,如果將以上Pandas套件的 & (And)邏輯運算子換成 | (Or),意思就會變成只要是學生或(Or)擁有星巴克會員,符合一個條件的資料就篩選出來,如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = (df['Job'] == 'Student') | (df['MembershipCard'] == 'Yes')
print(df.loc[filt, ['Job', 'MembershipCard', 'VisitFrequency']])
Q:Pandas如何篩選字串資料?
針對資料內容較多的情況下,想要以關鍵字的方式來篩選資料,則可以利用Pandas套件的字串方法(Method),如下範例:
df = pd.read_csv('Starbucks satisfactory survey.csv')
filt = df['PromotionsChannel'].str.contains('Social Media', na=False)
print(df.loc[filt, ['Job', 'PromotionsChannel']])
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2021/04/pandas-data-filtering.html )網站觀看更多精彩內容。
2 0 866 2