導讀:Pandas是Python數(shù)據(jù)分析的利器,也是各種數(shù)據(jù)建模的標準工具。本文帶大家入門Pandas,將介紹Python語言、Python數(shù)據(jù)生態(tài)和Pandas的一些基本功能。 在Python語言應用生態(tài)中,數(shù)據(jù)科學領域近年來十分熱門。作為數(shù)據(jù)科學中一個非?;A的庫,Pandas受到了廣泛關注。Pandas可以將現(xiàn)實中來源多樣的數(shù)據(jù)進行靈活處理和分析。 很多初學者可能有這樣一個疑問:“我想學的是Python數(shù)據(jù)分析,為什么經(jīng)常會被引導到Pandas上去?”雖然這兩個東西都是以P開頭的,但它們并不是同一個層面的東西。簡單來說,Pandas是Python這門編程語言中一個專門用來做數(shù)據(jù)分析的工具,它們的關系如圖1所示。接下來我們就說說Python是什么,Pandas又是什么。 圖1 Pandas和Python的關系 Python簡介 Python是一門強大的編程語言,它簡單易學,提供眾多高級數(shù)據(jù)結構,讓我們可以面向?qū)ο缶幊?。Python是一門解釋型語言,語法優(yōu)雅貼近人類自然語言,符合人類的認知習慣。 Python支持跨平臺,能夠運行在所有的常見操作系統(tǒng)上。Python在近期熱門的大數(shù)據(jù)、科學研究、機器學習、人工智能等領域大顯身手,并且?guī)缀踉谒蓄I域都有應用,因此學習它十分劃算。 Python由荷蘭人吉多·范羅蘇姆(Guido van Rossum)創(chuàng)造,第一版發(fā)布于1991年。關于為何有Python這個項目,吉多·范羅蘇姆在1996年曾寫道:6年前,也就是1989年12月,我在尋找一門“課余”編程項目來打發(fā)圣誕節(jié)前后的時間。到時我的辦公室會關門,而我只有一臺家用電腦,沒有什么其他東西。我決定為我當時正在構思的新的腳本語言寫一個解釋器,它是ABC語言的后代,對UNIX/C程序員會有吸引力。當時我對項目叫什么名字并不太在乎,由于我是《蒙提·派森的飛行馬戲團》的狂熱愛好者,我就選擇了用Python作為項目的名字。 《蒙提·派森的飛行馬戲團》(Monty Python’s Flying Circus)是BBC播出的英國電視喜劇劇集,蒙提·派森(Monty Python)是創(chuàng)作該劇的六人喜劇團隊,由此可見,Python雖原意為蟒蛇,但吉多·范羅蘇姆用它來命名一門開發(fā)語言,并非出于他對蟒蛇的喜愛,大家不必恐懼。 Python 2.0于2000年10月16日發(fā)布。Python 3.0于2008年12月3日發(fā)布,此版不完全兼容之前的Python源代碼。目前Python的正式版已經(jīng)更新到3.9版本,且官方不再維護2.0版本,因此建議初學者(包括已經(jīng)在學習的)至少從3.6版本開始學習Python,之后的版本功能差異不會太大。 Pandas簡介 Pandas是使用Python語言開發(fā)的用于數(shù)據(jù)處理和數(shù)據(jù)分析的第三方庫。它擅長處理數(shù)字型數(shù)據(jù)和時間序列數(shù)據(jù),當然文本型的數(shù)據(jù)也能輕松處理。 作為Python的三方庫,Pandas是建構在Python的基礎上的,它封裝了一些復雜的代碼實現(xiàn)過程,我們只要調(diào)用它的方法就能輕松實現(xiàn)我們的需求。 Python中的庫、框架、包意義基本相同,都是別人造好的輪子,我們可以直接使用,以減少重復的邏輯代碼。正是由于有眾多覆蓋各個領域的框架,我們使用起Python來才能簡單高效,而不用關注技術實現(xiàn)細節(jié)。 Pandas由Wes McKinney于2008年開發(fā)。McKinney當時在紐約的一家金融服務機構工作,金融數(shù)據(jù)分析需要一個健壯和超快速的數(shù)據(jù)分析工具,于是他就開發(fā)出了Pandas。 Pandas的命名跟熊貓無關,而是來自計量經(jīng)濟學中的術語“面板數(shù)據(jù)”(Panel data)。面板數(shù)據(jù)是一種數(shù)據(jù)集的結構類型,具有橫截面和時間序列兩個維度。不過,我們不必了解它,它只是一種靈感、思想來源。Pandas目前已經(jīng)更新到1.2.1版本。 Pandas對數(shù)據(jù)的處理是為數(shù)據(jù)分析服務的,它所提供的各種數(shù)據(jù)處理方法、工具是基于數(shù)理統(tǒng)計學的,包含了日常應用中的眾多數(shù)據(jù)分析方法。我們學習它不僅要掌控它的相應技術,還要從它的數(shù)據(jù)處理思路中學習數(shù)據(jù)分析的理論和方法。 特別地,如果你想要成為數(shù)據(jù)分析師、數(shù)據(jù)產(chǎn)品經(jīng)理、數(shù)據(jù)開發(fā)工程師等與數(shù)據(jù)相關的工作者,學習Pandas能讓你深入數(shù)據(jù)理論和實踐,更好地理解和應用數(shù)據(jù)。 Pandas可以輕松應對白領們?nèi)粘9ぷ髦械母鞣N表格數(shù)據(jù)處理需求,還應用在金融、統(tǒng)計、數(shù)理研究、物理計算、社會科學、工程等領域。 Pandas可以實現(xiàn)復雜的處理邏輯,這些往往是Excel等工具無法完成的,還可以自動化、批量化,免去我們在處理相同的大量數(shù)據(jù)時的重復工作。 Pandas可以實現(xiàn)非常震撼的可視化效果,它對接眾多令人賞心悅目的可視化庫,可以實現(xiàn)動態(tài)數(shù)據(jù)交互效果。 Pandas常用的基本功能如下:
1、安裝導入 首先安裝pandas庫。打開“終端”并執(zhí)行以下命令: pip install pandas matplotlib 安裝完成后,在終端中啟動Jupyter Notebook,給文件命名,如pandas-01。在Jupyter Notebook中導入Pandas,按慣例起別名pd:
這樣,我們就可以使用pd調(diào)用Pandas的所有功能了。 2、準備數(shù)據(jù)集 數(shù)據(jù)集(Data set或dataset),又稱為資料集、數(shù)據(jù)集合或資料集合,是一種由數(shù)據(jù)組成的集合,可以簡單理解成一個Excel表格。在分析處理數(shù)據(jù)時,我們要先了解數(shù)據(jù)集。對所持有數(shù)據(jù)各字段業(yè)務意義的理解是分析數(shù)據(jù)的前提。 介紹下我們后面會經(jīng)常用的數(shù)據(jù)集team.xlsx,可以從網(wǎng)址 https://www./file/data/dataset/team.xlsx下載。它的內(nèi)容見表1。 表1 team.xlsx的部分內(nèi)容 這是一個學生各季度成績總表(節(jié)選),各列說明如下。
3、讀取數(shù)據(jù) 了解了數(shù)據(jù)集的意義后,我們將數(shù)據(jù)讀取到Pandas里,變量名用df(DataFrame的縮寫,后續(xù)會介紹),它是Pandas二維數(shù)據(jù)的基礎結構。 import pandas as pd # 引入Pandas庫,按慣例起別名pd 這樣就把數(shù)據(jù)讀取到變量df中,輸入df看一下內(nèi)容,在Jupyter Notebook中的執(zhí)行效果如圖2所示。 圖2 讀取數(shù)據(jù)的執(zhí)行效果 其中:
4、查看數(shù)據(jù) 讀取完數(shù)據(jù)后我們來查看一下數(shù)據(jù):
查看前5條時的結果如圖3所示。 圖3 查看df前5條數(shù)據(jù) 5、驗證數(shù)據(jù) 拿到數(shù)據(jù),我們還需要驗證一下數(shù)據(jù)是否加載正確,數(shù)據(jù)大小是否正常。下面是一些常用的代碼,可以執(zhí)行看看效果(一次執(zhí)行一行): df.shape # (100, 6) 查看行數(shù)和列數(shù) df.info()顯示有數(shù)據(jù)類型、索引情況、行列數(shù)、各字段數(shù)據(jù)類型、內(nèi)存占用等:
df.describe()會計算出各數(shù)字字段的總數(shù)(count)、平均數(shù)(mean)、標準差(std)、最小值(min)、四分位數(shù)和最大值(max): Out: 6、建立索引 以上數(shù)據(jù)真正業(yè)務意義上的索引是name列,所以我們需要使它成為索引:
其中可選參數(shù)inplace=True會將指定好索引的數(shù)據(jù)再賦值給df使索引生效,否則索引不會生效。注意,這里并沒有修改原Excel,從我們讀取數(shù)據(jù)后就已經(jīng)和它沒有關系了,我們處理的是內(nèi)存中的df變量。 將name建立索引后,就沒有從0開始的數(shù)字索引了,如圖4所示。 圖4 將name設置為索引的執(zhí)行效果 7、數(shù)據(jù)選取 接下來,我們像Excel那樣,對數(shù)據(jù)做一些篩選操作。 (1)選擇列 選擇列的方法如下: # 查看指定列 顯示如下內(nèi)容:
這里返回的是一個Series類型數(shù)據(jù),可以理解為數(shù)列,它也是帶索引的。之前建立的索引在這里發(fā)揮出了作用,否則我們的索引是一個數(shù)字,無法知道與之對應的是誰的數(shù)據(jù)。 選擇多列的可以用以下方法: # 選擇多列 df.loc[x, y]是一個非常強大的數(shù)據(jù)選擇函數(shù),其中x代表行,y代表列,行和列都支持條件表達式,也支持類似列表那樣的切片(如果要用自然索引,需要用df.iloc[])。下面的例子中會進行演示。 (2)選擇行 選擇行的方法如下:
(3)指定行和列 同時給定行和列的顯示范圍: df.loc['Ben', 'Q1':'Q4'] # 只看Ben的四個季度成績 (4)條件選擇 按一定的條件顯示數(shù)據(jù):
8、排序 Pandas的排序非常方便,示例如下: df.sort_values(by='Q1') # 按Q1列數(shù)據(jù)升序排列 9、分組聚合 我們可以實現(xiàn)類似SQL的groupby那樣的數(shù)據(jù)透視功能:
統(tǒng)一聚合執(zhí)行后的效果如圖5所示。 圖5 按team分組后求平均數(shù) 不同計算方法聚合執(zhí)行后的效果如圖6所示。 圖6 分組后每列用不同的方法聚合計算 10、數(shù)據(jù)轉(zhuǎn)換 對數(shù)據(jù)表進行轉(zhuǎn)置,對類似圖6中的數(shù)據(jù)以A-Q1、E-Q4兩點連成的折線為軸對數(shù)據(jù)進行翻轉(zhuǎn),效果如圖7所示,不過我們這里僅用sum聚合。 df.groupby('team').sum().T 圖7 對聚合后的數(shù)據(jù)進行翻轉(zhuǎn) 也可以試試以下代碼,看有什么效果:
11、增加列 用Pandas增加一列非常方便,就與新定義一個字典的鍵值一樣。 df['one'] = 1 # 增加一個固定值的列 12、統(tǒng)計分析 根據(jù)你的數(shù)據(jù)分析目標,試著使用以下函數(shù),看看能得到什么結論。
13、繪圖 Pandas利用plot()調(diào)用Matplotlib快速繪制出數(shù)據(jù)可視化圖形。注意,第一次使用plot()時可能需要執(zhí)行兩次才能顯示圖形。如圖8所示,可以使用plot()快速繪制折線圖。 df['Q1'].plot() # Q1成績的折線分布 圖8 利用plot()快速繪制折線圖 如圖9所示,可以先選擇要展示的數(shù)據(jù),再繪圖。
圖9 選擇部分數(shù)據(jù)繪制折線圖 如圖10所示,可以使用plot.bar繪制柱狀圖。 df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱狀圖 圖10 利用plot.bar繪制的柱狀圖 如果想繪制橫向柱狀圖,可以將bar更換為barh,如圖11所示。 圖11 利用barh繪制的橫向柱狀圖 對數(shù)據(jù)聚合計算后,可以繪制成多條折線圖,如圖12所示。
圖12 多條折線圖 也可以用pie繪制餅圖,如圖13所示。 # 各組人數(shù)對比 圖13 餅圖的繪制效果 14、導出 可以非常輕松地導出Excel和CSV文件。
導出的文件位于notebook文件的同一目錄下,打開看看。 本文我們了解了編程語言Python的特點,為什么要學Python,Pandas庫的功能,快速感受了一下Pandas強大的數(shù)據(jù)處理和數(shù)據(jù)分析能力。這些是我們進入數(shù)據(jù)科學領域的基礎。 本文摘編于《深入淺出Pandas:利用Python進行數(shù)據(jù)處理與分析》,經(jīng)出版方授權發(fā)布。 |
|
來自: wenxuefeng360 > 《待分類1》