1. 程式人生 > >Python資料分析之pandas入門

Python資料分析之pandas入門

一、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     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物件每一列的所有元素都執行了減法操作。