1. 初識Pandas

1. 重要前言

這段時間和一些做數據分析的同學閒聊,我發現數據分析技能入門階段存在一個普遍性的問題,很多憑着興趣入坑的同學,都能夠很快熟悉Python基礎語法,然後不約而同的一頭扎進《利用Python進行數據分析》這本經典之中,硬着頭皮啃完之後,好像自己什麼都會了一點,然而實際操作起來既不知從何操起,又漏洞百出。

至於原因嘛,理解不夠實踐不夠是兩條老牌的攔路虎,只能靠自己來克服。還有一個非常有意思且經常被忽視的因素——陷入舉三反一的懵逼狀態。

什麼意思呢?假如我是個旱鴨子,想去學游泳,教練很認真的給我剖析了蛙泳的動作,扶着我的腰讓我在水裏劃拉了5分鐘,接着馬上給我講解了蝶泳,又是劃拉了5分鐘,然後又硬塞給我潛泳的姿勢,依然是劃拉5分鐘。最後,教練一下子把我丟進踩不到底的泳池,給我吶喊助威。

作爲一個還沒入門的旱鴨子,教練傾囊授了我3種游泳技巧,讓我分別實踐了5分鐘。這樣做的結果就是我哪一種游泳技巧也沒學會,只學會了喝水。當一個初學者一開始就陷入針對單個問題的多種解決方法,而每一種方法的實踐又淺嘗輒止,在面對具體問題時往往會手忙腳亂

拿Pandas來說,它的多種構造方式,多種索引方式以及類似效果的多種實現方法,很容易把初學者打入舉三反一的懵逼狀態。所以,儘量避開這個坑也是寫Pandas基礎系列的初衷,希望通過梳理和精簡知識點的方式,給需要的同學一些啓發。目前暫定整個基礎系列分爲4篇,基礎篇過後便是有趣的實戰篇。

2. pandas 簡介

江湖上流傳着這麼一句話——分析不識潘大師(PANDAS),縱是老手也枉然

Pandas是基於Numpy的專業數據分析工具,可以靈活高效的處理各種數據集,也是我們後期分析案例的神器。它提供了兩種類型的數據結構,分別是DataFrame和Series,我們可以簡單粗暴的把DataFrame理解爲Excel裏面的一張表而Series就是表中的某一列,後面學習和用到的所有Pandas騷操作,都是基於這些表和列進行的操作(關於Pandas和Excel的形象關係,推薦張俊紅寫的《對比EXCEL,輕鬆學習Python數據分析》)。

這裏有一點需要強調,Pandas和Excel、SQL相比,只是調用和處理數據的方式變了,核心都是對源數據進行一系列的處理,在正式處理之前,更重要的是謀定而後動,明確分析的意義,理清分析思路之後再處理和分析數據,往往事半功倍

3. 創建、讀取、存儲

1、創建

在Pandas中我們想要構造下面這一張表應該如何操作呢?
在這裏插入圖片描述
別忘了,第一步一定是先導入我們的庫——import pandas as pd

構造DataFrame最常用的方式是字典+列表,語句很簡單,先是字典外括,然後依次打出每一列標題及其對應的列值(此處一定要用列表),這裏列的順序並不重要:

import pandas as pd
import numpy as np
print(pd.__version__)
df1 = pd.DataFrame({'工資':[5000,7000,9000,8500],'績效分':[60,84,98,91],'備註':['不及格','良好','最佳','優秀']},
                   index=['老王','小劉','小趙','老龔'])
df1 

在這裏插入圖片描述
在這裏插入圖片描述
左邊是jupyter notebook中dataframe的樣子,如果對應到excel中,他就是右邊表格的樣子,通過改變columns,index和values的值來控制數據。
PS: 如果我們在創建時不指定index,系統會自動生成從0開始的索引。

2、 讀取

更多時候,我們是把相關文件數據直接讀進PANDAS中進行操作,這裏介紹兩種非常接近的讀取方式,一種是CSV格式的文件,一種是EXCEL格式(.xlsx和xls後綴)的文件。
讀取csv文件:

df2 = pd.read_csv("/home/kg/liujinjie/phonebook/流量練習數據.csv",engine="python")
df2.head()

在這裏插入圖片描述
engine是使用的分析引擎,讀取csv文件一般指定python避免中文和編碼造成的報錯。而讀取Excel文件,則是一樣的味道:

df2 = pd.read_csv("/home/kg/liujinjie/phonebook/流量練習數據.csv",engine="python")
df2.head()

在這裏插入圖片描述
非常easy,其實read_csv和read_excel還有一些參數,比如header、sep、names等等,大家可以做額外瞭解。實踐中數據源的格式一般都是比較規整的,更多情況是直接讀取。

3、存儲

存儲起來一樣非常簡單粗暴且相似:

df2.to_csv("/home/kg/liujinjie/phonebook/sowhat.csv")
df3.to_excel("/home/kg/liujinjie/phonebook/sowhat.xlsx")

4、數據源

流量來源 來源明細 訪客數 支付轉化率 客單價
一級 -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%

4. 快速認識數據

這裏以我們的案例數據爲例,迅速熟悉查看N行,數據格式概覽以及基礎統計數據。

1、查看數據,掐頭看尾

很多時候我們想要對數據內容做一個總覽,用df.head()函數直接可以查看默認的前5行,與之對應,df.tail()就可以查看數據尾部的5行數據,這兩個參數內可以傳入一個數值來控制查看的行數,例如df.head(10)表示查看前10行數據。
在這裏插入圖片描述
在這裏插入圖片描述

2、 格式查看

df.info()幫助我們一步摸清各列數據的類型,以及缺失情況:
在這裏插入圖片描述

3、統計信息概覽

df.describe() 快速計算數值型數據的關鍵統計指標,像平均數、中位數、標準差等等。
在這裏插入圖片描述
我們本來有5列數據,爲什麼返回結果只有兩列?那是因爲這個操作只針對數值型的列。其中count是統計每一列的有多少個非空數值,mean、std、min、max對應的分別是該列的均值、標準差、最小值和最大值,25%、50%、75%對應的則是分位數。

5. 列的基本處理方式

這裏,我們採用SQL四大法寶的邏輯來簡單梳理針對列的基本處理方式——增、刪、選、改

溫馨提示:使用Pandas時,儘量避免用行或者EXCEL操作單元格的思維來處理數據,要逐漸養成一種列向思維,每一列是同宗同源,處理起來是嗖嗖的快,just like HBase。

1、增

增加一列,用df[‘新列名’] = 新列值的形式,在原數據基礎上賦值即可:
在這裏插入圖片描述

2、刪:

我們用drop函數制定刪除對應的列,axis = 1表示針對列的操作,inplace爲True,則直接在源數據上進行修改,否則源數據會保持原樣。
在這裏插入圖片描述

3、選:

想要選取某一列怎麼辦?df[‘列名’]即可:
選取多列呢?需要用列表來傳遞:df[[‘第一列’,‘第二列’,‘第三列’…]]
在這裏插入圖片描述

4、 改:

好事多磨,複雜的針對特定條件和行列的篩選、修改,放在後面結合案例細講,這裏只講一下最簡單的更改:df[‘舊列名’] = 某個值或者某列值,就完成了對原列數值的修改。
在這裏插入圖片描述

6.常用數據類型及操作

1、字符串

字符串類型是最常用的格式之一了,Pandas中字符串的操作和原生字符串操作幾乎一毛一樣,唯一不同的是需要在操作前加上.str

提示:我們最初用df2.info()查看數據類型時,非數值型的列都返回的是object格式,和str類型深層機制上的區別就不展開了,在常規實際應用中,我們可以先理解爲object對應的就是str格式int64對應的就是int格式float64對應的就是float格式即可

在案例數據中,我們發現來源明細那一列,可能是系統導出的歷史遺留問題,每一個字符串前面都有一個-符號,又醜又無用,所以把他給拿掉:
在這裏插入圖片描述
一般來說清洗之後的列是要替換掉原來列的:
在這裏插入圖片描述

2、 數值型

數值型數據,常見的操作是計算,分爲與單個值的運算,長度相等列的運算。以案例數據爲例,源數據訪客數我們是知道的,現在想把所有渠道的訪客都加上10000,怎麼操作呢?

只需要選中訪客數所在列,然後加上10000即可,pandas自動將10000和每一行數值相加,針對單個值的其他運算(減乘除)也是如此。
在這裏插入圖片描述
列之間的運算語句也非常簡潔。源數據是包含了訪客數、轉化率和客單價,而實際工作中我們對每個渠道貢獻的銷售額更感興趣。(銷售額 = 訪客數 X 轉化率 X 客單價)

對應操作語句:df[‘銷售額’] = df[‘訪客數’] * df[‘轉化率’] * df[‘客單價’]

但爲什麼瘋狂報錯?

導致報錯的原因,是數值型數據非數值型數據相互計算導致的。PANDAS把帶%符號的轉化率識別成字符串類型,我們需要先拿掉百分號,再將這一列轉化爲浮點型數據:
在這裏插入圖片描述
要注意的是,這樣操作,把9.98%變成了9.98,所以我們還需要讓支付轉化率除以100,來還原百分數的真實數值:
在這裏插入圖片描述
然後,再用三個指標相乘計算銷售額:
在這裏插入圖片描述

3、時間類型

PANDAS中時間序列相關的水非常深,這裏只對日常中最基礎的時間格式進行講解,對時間序列感興趣的同學可以自行查閱相關資料,深入瞭解。

以案例數據爲例,我們這些渠道數據,是在2019年8月2日提取的,後面可能涉及到其他日期的渠道數據,所以需要加一列時間予以區分,在EXCEL中常用的時間格式是2019-8-3或者2019/8/3,我們用PANDAS來實現一下:在這裏插入圖片描述
在實際業務中,一些時候PANDAS會把文件中日期格式的字段讀取爲字符串格式,這裏我們先把字符串2019-8-3賦值給新增的日期列,然後用to_datetime()函數將字符串類型轉換成時間格式
在這裏插入圖片描述
轉換成時間格式(這裏是datetime64)之後,我們可以用處理時間的思路高效處理這些數據,比如,我現在想知道提取數據這一天離年末還有多少天(‘2020-12-31’),直接做減法(該函數接受時間格式的字符串序列,也接受單個字符串):在這裏插入圖片描述
最後我們一起快速回顧下:

第一步,我們先了解PANDAS到底是個什麼東西
第二步,學習如何構建讀入存儲數據。
第三步,拿到數據之後,怎麼樣快速查看數據
第四步,對數據有了基礎瞭解,就可以進行簡單的增刪選改了。
第五步,在瞭解基礎操作之後,對Pandas中基礎數據類型進行了初步照面

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