2. 靈活的Pandas索引

序言

學習了Pandas的同學,有超過60%仍然投向了Excel的懷抱,之所以做此下策,多半是因爲剛開始用Python處理數據時,選擇想要的行和列實在太痛苦,完全沒有Excel想要哪裏點哪裏的快感。

初識Pandas 教程考慮到篇幅問題只講了最基礎的列向索引,但這顯然不能滿足同志們日益增長的個性化服務(選取)需求。爲了舒緩痛感,增加快感,滿足需求,第二篇內容我們單獨把索引拎出來,結合場景詳細介紹兩種常用的索引方式:

第一種是基於位置(整數)的索引,案例短平快,有個粗略的瞭解即可,實際中偶有用到,但它的應用範圍不如第二種廣泛。

第二種是基於名稱(標籤)的索引,這是要敲黑板練的重點,因爲它將是我們後面進行數據清洗和分析的重要基石。

首先,簡單介紹一下練習的案例數據:

流量來源 來源明細 訪客數 支付轉化率 客單價
一級 -A 35188 9.98% 54.3
一級 -B 28467 11.27% 99.93
一級 -C 13747 2.54% 0.08
一級 -D 5183 2.47% 37.15
一級 -E 4361 4.31% 91.73
一級 -F 4063 11.57% 65.09
一級 -G 2122 10.27% 86.45
一級 -H 2041 7.06% 44.07
一級 -I 1991 16.52% 104.57
一級 -J 1981 5.75% 75.93
一級 -K 1958 14.71% 85.03
一級 -L 1780 13.15% 98.87
一級 -M 1447 1.04% 80.07
二級 -A 39048 11.60% 91.91
二級 -B 3316 7.09% 66.28
二級 -C 2043 5.04% 41.91
三級 -A 23140 9.69% 83.75
三級 -B 14813 20.14% 82.97
四級 -A 216 1.85% 94.25
四級 -B 31 0.00%
四級 -C 17 0.00%
四級 -D 3 0.00%

和第一篇數據集一樣,記錄着不同流量來源下,各渠道來源明細所對應的訪客數、支付轉化率和客單價。數據集雖然簡短(複雜的案例數據集在基礎篇完結後會如約而至),但是有足夠的代表性,下面開始我們索引的表演。

1. 基於位置(數字)的索引

先看一下索引的操作方式:

df.iloc[行索引,列索引]
第一個位置是行索引,輸入我們要取哪幾行位置的參數
第二個位置是列索引,輸入我們要取哪幾列的位置參數

我們需要根據實際情況,填入對應的行參數和列參數。

場景一(行選取)

目標:選擇流量來源等於一級的所有行。

思路:手指戳屏幕數一數,一級的渠道,是從第1行到第13行,對應行索引是0-12,但Python切片默認是含首不含尾的,要想選取0-12的索引行,我們得輸入0:13,列想要全部選取,則輸入冒號即可。
在這裏插入圖片描述

場景二(列選取)

目標:我們想要把所有渠道的流量來源和客單價單拎出來看一看。
思路:所有流量渠道,也就是所有行,在第一個行參數的位置我們輸入;再看列,流量來源是第1列,客單價是第5列,對應的列索引分別是0和4:
在這裏插入圖片描述
值得注意的是,如果我們要跨列選取,得先把位置參數構造成列表形式,這裏就是[0,4],如果是連續選取,則無需構造成列表,直接輸入0:5(選取索引爲0的列到索引爲4的列)就好。

場景三(行列交叉選取)

目標:我們想要看一看二級、三級流量來源、來源明細對應的訪客和支付轉化率

思路:先看行,二級三級渠道對應行索引是13:17,再次強調索引含首不含尾的原則,我們傳入的行參數是13:18;列的話我們需要流量來源、來源明細、訪客和轉化,也就是前4列,傳入參數0:4。
在這裏插入圖片描述

2. 基於名稱(標籤)的索引

爲了建立起橫向對比的體感,我們依然沿用上面三個場景。

場景一:選擇一級渠道的所有行。

思路:這次我們不用一個個數位置了,要篩選流量渠道爲一級的所有行,只需做一個判斷,判斷流量來源這一列,哪些值等於一級在這裏插入圖片描述
返回的結果由True和False(布爾型)構成,在這個例子中分別代表結果等於一級和非一級。在loc方法中,我們可以把這一列判斷得到的值傳入行參數位置Pandas會默認返回結果爲True的行(這裏是索引從0到12的行),而丟掉結果爲False的行,直接上例子:在這裏插入圖片描述

場景二:我們想要把所有渠道的流量來源和客單價單拎出來看一看。

思路:所有渠道等於所有行,我們在行參數位置直接輸入:,要提取流量來源和客單價列,直接輸入名稱到列參數位置,由於這裏涉及到兩列,所以得用列表包起來:
在這裏插入圖片描述

場景三:我們想要提取二級、三級流量來源、來源明細對應的訪客和支付轉化率。

思路:行提取用判斷,列提取輸入具體名稱參數。

df2.loc[df2['流量來源'].isin(['二級','三級']),['流量來源','來源明細','訪客數','支付轉化率']]

在這裏插入圖片描述
此處插播一條isin函數的廣告,這個函數能夠幫助我們快速判斷源數據中某一列(Series)的值是否等於列表中的值。拿案例來說,df[‘流量來源’].isin([‘二級’,‘三級’]),判斷的是流量來源這一列的值,是否等於“二級”或者“三級”,如果等於(等於任意一個)就返回True,否則返回False。我們再把這個布爾型判斷結果傳入行參數,就能夠很容易的得到流量來源等於二級或者三級的渠道。

既然loc的應用場景更加廣泛,應該給他加個雞腿,再來個接地氣的場景練練手。
插入場景之前,我們先花30秒的時間捋一捋Pandas中列(Series)向求值的用法,具體操作如下:

df2['訪客數'].mean()
df2['訪客數'].std()
df2['訪客數'].median()
df2['訪客數'].max()
df2['訪客數'].min()

只需要加個尾巴,均值、標準差等統計數值就出來了,瞭解完這個,下面正式進入場景四。

場景四:對於流量渠道數據,我們真正應該關注的是優質渠道,假如這裏我們定義訪客數、轉化率、客單價都高於平均值渠道是優質渠道,那怎麼找到這些渠道呢?

思路:優質渠道,得同時滿足訪客、轉化、客單高於平均值這三個條件,這是解題的關鍵。先看看均值各是多少:
在這裏插入圖片描述
再判斷各指標列是否大於均值:

df2['訪客數'] > df2['訪客數'].mean()
df2['支付轉化率']> df2['支付轉化率'].mean()
df2['客單價'] > df2['客單價'].mean()

在這裏插入圖片描述
要三個條件同時滿足,他們之間是一個“且”的關係(同時滿足),在pandas中,要表示同時滿足,各條件之間要用&符號連接,條件內部最好用括號區分;如果是的關係(滿足一個即可),則用|符號連接:

(df2['訪客數'] > df2['訪客數'].mean())&(df2['支付轉化率']> df2['支付轉化率'].mean())&(df2['客單價'] > df2['客單價'].mean())

在這裏插入圖片描述
這樣連接之後,返回True則表示該渠道同時滿足訪客、轉化率、客單價都高於均值的條件,接下來我們只需要把這些值傳入到行參數的位置。

df2.loc[(df2['訪客數'] > df2['訪客數'].mean())&(df2['支付轉化率']> df2['支付轉化率'].mean())&(df2['客單價'] > df2['客單價'].mean()),:]

在這裏插入圖片描述
到這一步,我們直接篩選出了4條關鍵指標都高於均值的優質渠道。

這兩種索引方式,分別是基於位置(數字)的索引基於名稱(標籤)的索引,關鍵在於把腦海中想要選取的行和列,映射到對應的行參數與列參數中去。

只要稍加練習,我們就能夠隨心所欲的用pandas處理和分析數據,邁過了這一步之後,你會發現和Excel相比,Python是如此的美豔動人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章