Python數據分析實戰基礎 | 初識Pandas

點擊上方「Python爬蟲與數據挖掘」,進行關注python

回覆「書籍」便可獲贈Python從入門到進階共10本電子書web

算法

微信

數據結構

app

願君學長鬆,慎勿做桃李。
這是Python數據分析實戰基礎的第一篇內容,主要是和Pandas來個簡單的邂逅。已經熟練掌握Pandas的同窗,能夠加快手速滑動瀏覽或者直接略過本文。



01  重要的前言

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




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

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




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

拿Pandas來講,它的多種構造方式,多種索引方式以及相似效果的多種實現方法,很容易把初學者打入舉三反一的懵逼狀態。因此,儘可能避開這個坑 是我 Pandas 基礎系列的初衷, 但願經過 梳理 和精簡知識點 的方式, 給須要的同窗一些啓發。目前暫定整個基礎系列分爲4篇,基礎篇事後即是有趣的實戰篇。

下面開始進入正題(我真是太嘮叨了)。


02  Pandas簡介

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

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

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


03 建立、讀取和存儲

一、建立
在Pandas中咱們想要構造下面這一張表應該如何操做呢?




別忘了,第一步必定是先導入咱們的庫——import pandas as pd

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


左邊是jupyter notebook中dataframe的樣子,若是對應到excel中,他就是右邊表格的樣子,經過改變columns,index和values的值來控制數據。
PS,若是咱們在建立時不指定index,系統會自動生成從0開始的索引。

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

讀取csv文件:


engine是使用的分析引擎,讀取csv文件通常指定python避免中文和編碼形成的報錯。 而讀 取Excel文件,則是同樣的味道:


很是easy,其實read_csv和read_excel還有一些參數,好比header、sep、names等,你們能夠作額外瞭解。實踐中數據源的格式通常都是比較規整的,更多狀況是直接讀取。

三、存儲
存儲起來同樣很是簡單粗暴且類似:





04 快速認識數據

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

一、查看數據,掐頭看尾
不少時候咱們想要對數據內容作一個總覽,用df.head()函數直接能夠查看默認的前5行,與之對應,df.tail()就能夠查看數據尾部的5行數據,這兩個參數內能夠傳入一個數值來控制查看的行數,例如df.head(10)表示查看前10行數據。


二、 格式查看
df.info()幫助咱們一步摸清各列數據的類型,以及缺失狀況:


從上面直接能夠知道數據集的行列數,數據集的大小,每一列的數據類型,以及有多少條非空數據。

三、統計信息概覽
快速計算數值型數據的關鍵統計指標,像平均數、中位數、標準差等等。


咱們原本有5列數據,爲何返回結果只有兩列? 那是由於這個操做只針對數值型的列。 其中count是統計每一列的有多少個非空數值,mean、std、min、max對應的分別是該列的均值、標準差、最小值和最大值,25%、50%、75%對應的則是分位數。


05 列的基本處理方式

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

舒適提示: 使用Pandas時,儘可能避免用行或者EXCEL操做單元格的思惟來處理數據,要逐漸養成一種列向思惟,每一列是同宗同源,處理起來是嗖嗖的快。

一、增
增長一列,用df['新列名'] = 新列值的形式,在原數據基礎上賦值便可:


二、刪:
咱們用drop函數制定刪除對應的列,axis = 1表示針對列的操做,inplace爲True,則直接在源數據上進行修改,不然源數據會保持原樣。


三、選:
想要選取某一列怎麼辦? df['列名']便可:


選取多列呢? 須要用列表來傳遞: df[['第一列','第二列','第三列'..]]


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


06 經常使用數據類型及操做

一、字符串
字符串類型是最經常使用的格式之一了,Pandas中字符串的操做和原生字符串操做幾乎一毛同樣,惟一不一樣的是須要在操做前加上".str"。

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

在案例數據中,咱們發現來源明細那一列,多是系統導出的歷史遺留問題,每個字符串前面都有一個「-」符號,又醜又無用,因此把他給拿掉:


通常來講清洗以後的列是要替換掉原來列的:


二、 數值型
數值型數據,常見的操做是計算,分爲與單個值的運算,長度相等列的運算。

以案例數據爲例,源數據訪客數咱們是知道的,如今想把全部渠道的訪客都加上10000,怎麼操做呢?





只須要選中訪客數所在列,而後加上10000便可,pandas自動將10000和每一行數值相加,針對單個值的其餘運算(減乘除)也是如此。

列之間的運算語句也很是簡潔。 源數據是包含了訪客數、轉化率和客單價,而實際工做中咱們對每一個渠道貢獻的銷售額更感興趣。 (銷售額 = 訪客數 X 轉化率 X 客單價)

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

但爲何瘋狂報錯?

致使報錯的緣由,是數值型數據和非數值型數據相互計算致使的。 PANDAS把帶「%」符號的轉化率識別成字符串類型,咱們須要先拿掉百分號,再將這一列轉化爲浮點型數據:




要注意的是,這樣操做,把9.98%變成了9.98,因此咱們還須要讓支付轉化率除以100,來還原百分數的真實數值:





而後,再用三個指標相乘計算銷售額:







三、時間類型
PANDAS中時間序列相關的水很是深,這裏只對平常中最基礎的時間格式進行講解,對時間序列感興趣的同窗能夠自行查閱相關資料,深刻了解。

以案例數據爲例,咱們這些渠道數據,是在2019年8月2日提取的,後面可能涉及到其餘日期的渠道數據,因此須要加一列時間予以區分,在EXCEL中經常使用的時間格式是'2019-8-3'或者'2019/8/3', 咱們用PANDAS來實現一下:





在實際業務中,一些時候PANDAS會把文件中日期格式的字段讀取爲字符串格式,這裏咱們先把字符串'2019-8-3'賦值給新增的日期列,而後用to_datetime()函數將字符串類型轉換成時間格式:





轉換成時間格式(這裏是datetime64)以後,咱們能夠用處理時間的思路高效處理這些數據,好比,我如今想知道提取數據這一天離年底還有多少天('2019-12-31'), 直接作減法( 該函數接受時間格式的字符串序列,也接受單個字符串):





是否是很是簡單?

最後咱們一塊兒快速回顧下第一篇文章的內容:


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



每一步都是本着小而美(畢竟臭美也算美)和輕量的初心,和你們一塊兒從新認識回顧這些模塊,而後在接下來的案例實踐中檢驗、鞏固、沉澱這些操做與分析思路。

本文完整案例數據,後臺回覆「初識pandas」便可獲取

後臺回覆「專欄」二字,能夠獲取《數據結構與算法之美》優惠海報,歡迎你們訂閱。less


------------------- End -------------------編輯器

往期精彩文章推薦:函數

歡迎你們點贊,留言,轉發,轉載,感謝你們的相伴與支持工具

想加入Python學習羣請在後臺回覆【入羣

萬水千山老是情,點個【在看】行不行

/今日留言主題/

請說一下你對pandas庫的見解。


本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索