Python資料分析之pandas入門
阿新 • • 發佈:2019-01-03
一、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的使用
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 99Series物件可以進行運算,比如加減乘除,也可以使用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 15 john 0 tom 1 mary 2 cathy 3 dtype: int32 john 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物件每一列的所有元素都執行了減法操作。