14個pandas神操做,手把手教你寫代碼

文章來源於公衆號:數倉寶貝庫程序員

導讀:Pandas是Python數據分析的利器,也是各類數據建模的標準工具。本文帶你們入門Pandas,將介紹Python語言、Python數據生態和Pandas的一些基本功能。數據庫

在Python語言應用生態中,數據科學領域近年來十分熱門。做爲數據科學中一個很是基礎的庫,Pandas受到了普遍關注。Pandas能夠將現實中來源多樣的數據進行靈活處理和分析。編程

01網絡

Pandas是什麼數據結構

不少初學者可能有這樣一個疑問:「我想學的是Python數據分析,爲何常常會被引導到Pandas上去?」雖然這兩個東西都是以P開頭的,但它們並非同一個層面的東西。簡單來講,Pandas是Python這門編程語言中一個專門用來作數據分析的工具,它們的關係如圖1所示。接下來咱們就說說Python是什麼,Pandas又是什麼。app

圖1 Pandas和Python的關係框架

 

Python簡介機器學習

Python是一門強大的編程語言,它簡單易學,提供衆多高級數據結構,讓咱們能夠面向對象編程。Python是一門解釋型語言,語法優雅貼近人類天然語言,符合人類的認知習慣。編程語言

Python支持跨平臺,可以運行在全部的常見操做系統上。Python在近期熱門的大數據、科學研究、機器學習、人工智能等領域大顯身手,而且幾乎在全部領域都有應用,所以學習它十分划算。函數

Python由荷蘭人吉多·範羅蘇姆(Guido van Rossum)創造,初版發佈於1991年。關於爲什麼有Python這個項目,吉多·範羅蘇姆在1996年曾寫道:6年前,也就是1989年12月,我在尋找一門「課餘」編程項目來打發聖誕節先後的時間。到時個人辦公室會關門,而我只有一臺家用電腦,沒有什麼其餘東西。我決定爲我當時正在構思的新的腳本語言寫一個解釋器,它是ABC語言的後代,對UNIX/C程序員會有吸引力。當時我對項目叫什麼名字並不太在意,因爲我是《蒙提·派森的飛行馬戲團》的狂熱愛好者,我就選擇了用Python做爲項目的名字。

《蒙提·派森的飛行馬戲團》(Monty Python’s Flying Circus)是BBC播出的英國電視喜劇劇集,蒙提·派森(Monty Python)是創做該劇的六人喜劇團隊,因而可知,Python雖原意爲蟒蛇,但吉多·範羅蘇姆用它來命名一門開發語言,並不是出於他對蟒蛇的喜好,你們沒必要恐懼。

Python 2.0於2000年10月16日發佈。Python 3.0於2008年12月3日發佈,此版不徹底兼容以前的Python源代碼。目前Python的正式版已經更新到3.9版本,且官方再也不維護2.0版本,所以建議初學者(包括已經在學習的)至少從3.6版本開始學習Python,以後的版本功能差別不會太大。

 

Pandas簡介

Pandas是使用Python語言開發的用於數據處理和數據分析的第三方庫。它擅長處理數字型數據和時間序列數據,固然文本型的數據也能輕鬆處理。

做爲Python的三方庫,Pandas是建構在Python的基礎上的,它封裝了一些複雜的代碼實現過程,咱們只要調用它的方法就能輕鬆實現咱們的需求。

Python中的庫、框架、包意義基本相同,都是別人造好的輪子,咱們能夠直接使用,以減小重複的邏輯代碼。正是因爲有衆多覆蓋各個領域的框架,咱們使用起Python來才能簡單高效,而不用關注技術實現細節。

Pandas由Wes McKinney於2008年開發。McKinney當時在紐約的一家金融服務機構工做,金融數據分析須要一個健壯和超快速的數據分析工具,因而他就開發出了Pandas。

Pandas的命名跟熊貓無關,而是來自計量經濟學中的術語「面板數據」(Panel data)。面板數據是一種數據集的結構類型,具備橫截面和時間序列兩個維度。不過,咱們沒必要了解它,它只是一種靈感、思想來源。Pandas目前已經更新到1.2.1版本。

 

02

Pandas的使用人羣

Pandas對數據的處理是爲數據分析服務的,它所提供的各類數據處理方法、工具是基於數理統計學的,包含了平常應用中的衆多數據分析方法。咱們學習它不只要掌控它的相應技術,還要從它的數據處理思路中學習數據分析的理論和方法。

特別地,若是你想要成爲數據分析師、數據產品經理、數據開發工程師等與數據相關的工做者,學習Pandas能讓你深刻數據理論和實踐,更好地理解和應用數據。

Pandas能夠輕鬆應對白領們平常工做中的各類表格數據處理需求,還應用在金融、統計、數理研究、物理計算、社會科學、工程等領域。

Pandas能夠實現複雜的處理邏輯,這些每每是Excel等工具沒法完成的,還能夠自動化、批量化,免去咱們在處理相同的大量數據時的重複工做。

Pandas能夠實現很是震撼的可視化效果,它對接衆多使人賞心悅目的可視化庫,能夠實現動態數據交互效果。

 

03

Pandas的基本功能

 

Pandas經常使用的基本功能以下:

  • 從Excel、CSV、網頁、SQL、剪貼板等文件或工具中讀取數據;

  • 合併多個文件或者電子表格中的數據,將數據拆分爲獨立文件;

  • 數據清洗,如去重、處理缺失值、填充默認值、補全格式、處理極端值等;

  • 創建高效的索引;

  • 支持大致量數據;

  • 按必定業務邏輯插入計算後的列、刪除列;

  • 靈活方便的數據查詢、篩選;

  • 分組聚合數據,可獨立指定分組後的各字段計算方式;

  • 數據的轉置,如行轉列、列轉行變動處理;

  • 鏈接數據庫,直接用SQL查詢數據並進行處理;

  • 對時序數據進行分組採樣,如按季、按月、按工做小時,也能夠自定義週期,如工做日;

  • 窗口計算,移動窗口統計、日期移動等;

  • 靈活的可視化圖表輸出,支持全部的統計圖形;

  • 爲數據表格增長展現樣式,提升數據識別效率。

 

04

Pandas快速入門

一、安裝導入

首先安裝pandas庫。打開「終端」並執行如下命令:


pip install pandas matplotlib

# 如網絡慢,可指定國內源快速下載安裝

pip install pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

安裝完成後,在終端中啓動Jupyter Notebook,給文件命名,如pandas-01。在Jupyter Notebook中導入Pandas,按慣例起別名pd:


# 引入 Pandas庫,按慣例起別名pd

import pandas as pd

這樣,咱們就可使用pd調用Pandas的全部功能了。

 

二、準備數據集

數據集(Data set或dataset),又稱爲資料集、數據集合或資料集合,是一種由數據組成的集合,能夠簡單理解成一個Excel表格。在分析處理數據時,咱們要先了解數據集。對所持有數據各字段業務意義的理解是分析數據的前提。

介紹下咱們後面會常常用的數據集team.xlsx,能夠從網址 https://www.gairuo.com/file/data/dataset/team.xlsx下載。它的內容見表1。

 

表1 team.xlsx的部份內容

 

這是一個學生各季度成績總表(節選),各列說明以下。

  • name:學生的姓名,這列沒有重複值,一個學生一行,即一條數據,共100條。

  • team:所在的團隊、班級,這個數據會重複。

  • Q1~Q4:各個季度的成績,可能會有重複值。

 

三、讀取數據

瞭解了數據集的意義後,咱們將數據讀取到Pandas裏,變量名用df(DataFrame的縮寫,後續會介紹),它是Pandas二維數據的基礎結構。


import pandas as pd # 引入Pandas庫,按慣例起別名pd



# 如下兩種效果同樣,若是是網址,它會自動將數據下載到內存

df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')

df = pd.read_excel('team.xlsx'# 文件在notebook文件同一目錄下

# 若是是CSV,使用pd.read_csv(),還支持不少類型的數據讀取

這樣就把數據讀取到變量df中,輸入df看一下內容,在Jupyter Notebook中的執行效果如圖2所示。

 

圖2 讀取數據的執行效果

 

其中:

  • 自動增長了第一列,是Pandas爲數據增長的索引,從0開始,程序不知道咱們真正的業務索引,每每須要後面從新指定,使它有必定的業務意義;

  • 因爲數據量大,自動隱藏了中間部分,只顯示先後5條;

  • 底部顯示了行數和列數。

     

四、查看數據

讀取完數據後咱們來查看一下數據:


df.head() # 查看前5條,括號裏能夠寫明你想看的條數

df.tail() # 查看尾部5條

df.sample(5) # 隨機查看5條

查看前5條時的結果如圖3所示。

 

圖3 查看df前5條數據

 

五、驗證數據

拿到數據,咱們還須要驗證一下數據是否加載正確,數據大小是否正常。下面是一些經常使用的代碼,能夠執行看看效果(一次執行一行):


df.shape # (100, 6) 查看行數和列數

df.info() # 查看索引、數據類型和內存信息

df.describe() # 查看數值型列的彙總統計

df.dtypes # 查看各字段類型

df.axes # 顯示數據行和列名

df.columns # 列名

df.info()顯示有數據類型、索引狀況、行列數、各字段數據類型、內存佔用等:


df.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 100 entries, 0 to 99

Data columns (total 6 columns):

 #   Column  Non-Null Count  Dtype

---  ------  --------------  -----

 0   name    100 non-null    object

 1   team    100 non-null    object

 2   Q1      100 non-null    int64

 3   Q2      100 non-null    int64

 4   Q3      100 non-null    int64

 5   Q4      100 non-null    int64

dtypes: int64(4), object(2)

memory usage: 4.8+ KB

df.describe()會計算出各數字字段的總數(count)、平均數(mean)、標準差(std)、最小值(min)、四分位數和最大值(max):

Out:

               Q1          Q2          Q3          Q4

count  100.000000  100.000000  100.000000  100.000000

mean    49.200000   52.550000   52.670000   52.780000

std     29.962603   29.845181   26.543677   27.818524

min      1.000000    1.000000    1.000000    2.000000

25%     19.500000   26.750000   29.500000   29.500000

50%     51.500000   49.500000   55.000000   53.000000

75%     74.250000   77.750000   76.250000   75.250000

max     98.000000   99.000000   99.000000   99.000000

 

六、創建索引

以上數據真正業務意義上的索引是name列,因此咱們須要使它成爲索引:


df.set_index('name', inplace=True# 創建索引並生效

其中可選參數inplace=True會將指定好索引的數據再賦值給df使索引生效,不然索引不會生效。注意,這裏並無修改原Excel,從咱們讀取數據後就已經和它沒有關係了,咱們處理的是內存中的df變量。

將name創建索引後,就沒有從0開始的數字索引了,如圖4所示。

 

圖4 將name設置爲索引的執行效果

 

七、數據選取

接下來,咱們像Excel那樣,對數據作一些篩選操做。

(1)選擇列

選擇列的方法以下:


# 查看指定列

df['Q1']

df.Q1 # 同上,若是列名符合Python變量名要求,可以使用

顯示以下內容:


df.Q1

Out:

0     89

1     36

2     57

3     93

4     65

      ..

95    48

96    21

97    98

98    11

99    21

Name: Q1, Length: 100, dtype: int64

這裏返回的是一個Series類型數據,能夠理解爲數列,它也是帶索引的。以前創建的索引在這裏發揮出了做用,不然咱們的索引是一個數字,沒法知道與之對應的是誰的數據。

選擇多列的能夠用如下方法:

# 選擇多列

df[['team''Q1']] # 只看這兩列,注意括號

df.loc[:, ['team''Q1']] # 和上一行效果同樣

 

df.loc[x, y]是一個很是強大的數據選擇函數,其中x表明行,y表明列,行和列都支持條件表達式,也支持相似列表那樣的切片(若是要用天然索引,須要用df.iloc[])。下面的例子中會進行演示。

 

(2)選擇行

選擇行的方法以下:

# 用指定索引選取

df[df.index == 'Liver'# 指定姓名



# 用天然索引選擇,相似列表的切片

df[0:3] # 取前三行

df[0:10:2] # 在前10箇中每兩個取一個

df.iloc[:10,:] # 前10個

 

(3)指定行和列

同時給定行和列的顯示範圍:

df.loc['Ben''Q1':'Q4'# 只看Ben的四個季度成績

df.loc['Eorge':'Alexander''team':'Q4'# 指定行區間

 

(4)條件選擇

按必定的條件顯示數據:

# 單一條件

df[df.Q1 > 90] # Q1列大於90的

df[df.team == 'C'# team列爲'C'的

df[df.index == 'Oscar'# 指定索引即原數據中的name



# 組合條件

df[(df['Q1'] > 90) & (df['team'] == 'C')] # and關係

df[df['team'] == 'C'].loc[df.Q1>90] # 多重篩選

 

八、排序

Pandas的排序很是方便,示例以下:

df.sort_values(by='Q1'# 按Q1列數據升序排列

df.sort_values(by='Q1'ascending=False) # 降序



df.sort_values(['team''Q1'], ascending=[True, False]) # team升序,Q1降序

 

九、分組聚合

咱們能夠實現相似SQL的groupby那樣的數據透視功能:


df.groupby('team').sum() # 按團隊分組對應列相加

df.groupby('team').mean() # 按團隊分組對應列求平均

# 不一樣列不一樣的計算方法

df.groupby('team').agg({'Q1': sum,  # 總和

                        'Q2''count'# 總數

                        'Q3':'mean'# 平均

                        'Q4': max}) # 最大值

統一聚合執行後的效果如圖5所示。

 

圖5 按team分組後求平均數

 

不一樣計算方法聚合執行後的效果如圖6所示。

 

圖6 分組後每列用不一樣的方法聚合計算

 

十、數據轉換

對數據表進行轉置,對相似圖6中的數據以A-Q一、E-Q4兩點連成的折線爲軸對數據進行翻轉,效果如圖7所示,不過咱們這裏僅用sum聚合。

 

df.groupby('team').sum().T

 

圖7 對聚合後的數據進行翻轉

 

也能夠試試如下代碼,看有什麼效果:

df.groupby('team').sum().stack()

df.groupby('team').sum().unstack()

 

十一、增長列

用Pandas增長一列很是方便,就與新定義一個字典的鍵值同樣。

df['one'] = 1 # 增長一個固定值的列

df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4 # 增長總成績列

# 將計算得來的結果賦值給新列

df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x), axis=1)

df['total'] = df.sum(axis=1# 能夠把全部爲數字的列相加

df['avg'] = df.total/4 # 增長平均成績列

 

十二、統計分析

根據你的數據分析目標,試着使用如下函數,看看能獲得什麼結論。

df.mean() # 返回全部列的均值

df.mean(1# 返回全部行的均值,下同

df.corr() # 返回列與列之間的相關係數

df.count() # 返回每一列中的非空值的個數

df.max() # 返回每一列的最大值

df.min() # 返回每一列的最小值

df.median() # 返回每一列的中位數

df.std() # 返回每一列的標準差

df.var() # 方差

s.mode() # 衆數

 

1三、繪圖

Pandas利用plot()調用Matplotlib快速繪製出數據可視化圖形。注意,第一次使用plot()時可能須要執行兩次才能顯示圖形。如圖8所示,可使用plot()快速繪製折線圖。

df['Q1'].plot() # Q1成績的折線分佈

 

圖8 利用plot()快速繪製折線圖

 

如圖9所示,能夠先選擇要展現的數據,再繪圖。


df.loc['Ben','Q1':'Q4'].plot() # ben四個季度的成績變化

圖9 選擇部分數據繪製折線圖

 

如圖10所示,可使用plot.bar繪製柱狀圖。

df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱狀圖

df.loc[ 'Ben','Q1':'Q4'].plot.barh() # 橫向柱狀圖

 

圖10 利用plot.bar繪製的柱狀圖

 

若是想繪製橫向柱狀圖,能夠將bar更換爲barh,如圖11所示。

圖11 利用barh繪製的橫向柱狀圖


 

對數據聚合計算後,能夠繪製成多條折線圖,如圖12所示。

 

# 各Team四個季度總成績趨勢

df.groupby('team').sum().T.plot()

 

圖12 多條折線圖

 

也能夠用pie繪製餅圖,如圖13所示。


# 各組人數對比

df.groupby('team').count().Q1.plot.pie()

圖13 餅圖的繪製效果

 

 

1四、導出

能夠很是輕鬆地導出Excel和CSV文件。

df.to_excel('team-done.xlsx'# 導出 Excel文件

df.to_csv('team-done.csv'# 導出 CSV文件

 

導出的文件位於notebook文件的同一目錄下,打開看看。

本文咱們瞭解了編程語言Python的特色,爲何要學Python,Pandas庫的功能,快速感覺了一下Pandas強大的數據處理和數據分析能力。這些是咱們進入數據科學領域的基礎。

 

本文摘編於《深刻淺出Pandas:利用Python進行數據處理與分析》,經出版方受權發佈。

做者:李慶輝  數據產品專家,某電商公司數據產品團隊負責人,擅長經過數據治理、數據分析、數據化運營提高公司的數據應用水平。

相關文章
相關標籤/搜索