一、pandas庫簡介
pandas是一個專門用于數據分析的開源Python庫,目前很多使用Python分析數據的專業人員都將pandas作為基礎工具來使用。pandas是以Numpy作為基礎來設計開發的,Numpy是大量Python數據科學計算庫的基礎,pandas以此為基礎,在計算方面具有很高的性能。pandas有兩大數據結構,這是pandas的核心,數據分析的所有任務都離開它們,分別是Series和DataFrame。
二、pandas庫的安裝
paandas安裝較為簡單,如果使用Anaconda的話,就在終端輸入命令 “conda install pandas” 就能安裝;如果電腦安裝了pip的話,就在終端輸入命令 “pip install pandas” 就能安裝成功。安裝完成后,可以在終端輸入 “import pandas as pd” ,測試pandas是否安裝成功。
三、Series的使用
Series用來表示一維數據結構,跟數組類似,它由兩個相關聯的數組組成,其中一個叫index的數組用來存儲標簽,這些標簽與另一個數組中的元素一一對應。如下圖所示:
聲明Series對象時,需要調用Series()構造函數,并傳入一個數組作為Series的主數組,比如:
import pandas as pd ser=pd.Series([12,33,55,66]) print(ser)'''輸出為 0 12 1 33 2 55 3 66 dtype: int64 '''
運行上面的代碼,可以知道,如果不指定標簽,那么默認標簽就是從0開始遞增,我們也可以在聲明一個Series對象時給它指定標簽:
import pandas as pd ser=pd.Series([12,33,55,66],index=['a','s','d','f']) print(ser)'''輸出為: a 12 s 33 d 55 f 66 dtype: int64 '''
我們可以通過Series的index很方便得到其內部元素,或者為某元素賦值:
import pandas as pd ser=pd.Series([12,33,55,66]) print(ser[2]) ser[2]=99 print(ser[2])'''輸出為: 55 99 '''
Series對象可以進行運算,比如加減乘除,也可以使用Numpy中的數學函數來對它進行計算:
import pandas as pd ser=pd.Series([12,33,55,66]) ser2=ser/2 print(ser2)import numpy as np print(np.log(ser))'''輸出為: 0 6.0 1 16.5 2 27.5 3 33.0 dtype: float64 0 2.484907 1 3.496508 2 4.007333 3 4.189655 dtype: float64 '''
從上面可以看出,Series對象似乎跟字典很相似,我們可以把Series對象當作字典來使用,我們在創建Series對象時,將創建好的字典傳入Series的構造函數即可,這樣字典的鍵就組成了索引數組,每個索引對應的元素就是字典中對應的值:
import pandas as pd dic={'wife':'kathy','son':'mary','mother':'lily','father':'tom'} ser=pd.Series(dic) print(ser)'''輸出為: wife kathy son mary mother lily father tom dtype: object '''
四、DataFrame的使用
DataFrame這種數據結構針對的是多維數據,由按一定順序排列的多列數據組成,列之間的數據類型會不同,如下圖所示:
從圖中可以看出,DataFrame對象有兩個索引數組,第一個數組index與行相關,這與Series相似,每個index標簽與所在行的所有元素相關聯。它的第二個數組包含一系列標簽,每個標簽下包含一列數據。可以將DataFrame理解為由多個Series對象組成的字典,每一列的名稱為字典的鍵,Series作為字典的值。
創建DataFrame對象的常用方法就是傳遞一個字典對象給DataFrame()構造函數:
import pandas as pd dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['男','男','女','男']} frame=pd.DataFrame(dic) print(frame)'''輸出為:name age sex 0 tom 14 男 1 mary 15 男 2 john 77 女 3 mike 45 男 '''
跟Series對象類似。DataFrame如果沒有明確指定標簽,那么它的默認標簽也是從0開始遞增。如果我們想知道DataFrame對象所有列的名稱,則調用columns屬性就可以了,獲取索引列表的話就調用index屬性,調用values屬性將獲取所有的元素。可以給DateFrame對象添加列:
import pandas as pd dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['男','男','女','男']} frame=pd.DataFrame(dic) frame['weight']=[89,99,145,123] print(frame)'''輸出為:name age sex weight 0 tom 14 男 89 1 mary 15 男 99 2 john 77 女 145 3 mike 45 男 123 '''
在數據處理中,有有時也會用到DataFrame的轉置操作,即把行變為列,列變為行,調用DataFrame的T屬性即可完成轉置:
import pandas as pd dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['男','男','女','男']} frame=pd.DataFrame(dic) print(frame.T)'''輸出為:0 1 2 3 name tom mary john mike age 14 15 77 45 sex 男 男 女 男 '''
五、Series與DataFrame對象之間的運算
pandas允許Series對象與DataFrame對象進行運算,定義Series和DataFrame對象時,把Series對象的索引和DataFrame的列名稱保持一致:
import pandas as pd import numpy as np frame=pd.DataFrame(np.arange(16).reshape((4,4)),index=['age','name','sex','weight'],columns=['john','tom','mary','cathy']) print(frame) ser=pd.Series(np.arange(4),index=['john','tom','mary','cathy']) print(ser) res=frame-ser print(res)'''輸出為:john tom mary cathy age 0 1 2 3 name 4 5 6 7 sex 8 9 10 11 weight 12 13 14 15john 0 tom 1 mary 2 cathy 3 dtype: int32john tom mary cathy age 0 0 0 0 name 4 4 4 4 sex 8 8 8 8 weight 12 12 12 12 '''
可以看出,DataFrame對象的各元素分別減去了Series對象中索引與之相同的元素,DataFrame對象每一列的所有元素都執行了減法操作。