一:pandas的數據類型html
pandas中最重要的數據類型是Series序列 和 DataFrame數據框,Series至關於Numpy中的一維數組,不一樣之處series會自帶索引值。dataframe至關於numpy的二維數組。python
1.1)Series的建立---有兩種方式:經過一維數組 和 字典數據庫
1)經過一維數組建立序列數組
OUT:app
2)經過字典建立序列dom
OUT:函數
3)經過DataFrame的某一行或某一列建立序列學習
2.2)建立DataFramespa
1) 經過二維數組建立3d
OUT:
2)經過字典列表建立
OUT:
3)經過嵌套字典
OUT:
4)經過dataframe建立dataframe
OUT:
二:數據索引Index
2.1) 獲取Series序列的數據----若是沒有給序列指定索引,那麼就建立一個從0開始自增的序列,df.index來獲取索引值,或經過df.index來指定索引值
series序列是一維數組,能夠經過索引切片來獲取數據
2.2)獲取DataFrame的數據
1)獲取列數據-- df[列名] 或 使用點運算符 df.列名
2)獲取行數據
a) df.iloc[索引值] (只適用於數字標籤的索引)
b) df.loc[ ' '] , 適用於索引是字符串標籤
c) df.ix[' ' ] , 主要用於字符串標籤的索引,也可做爲數字索引的備選
2.3) 自動化對齊
對pandas的series序列進行運算時,有相同的索引值上進行運算,索引值不一樣就進行自動補齊
三:查詢數據
引入數據集
df = pf.read_csv( '文件路徑名' , header = None) (header 表示返回的數據是否有別名)
student = pd.read_csv(' ')
查詢前幾行 或 後幾行
student.head(5 )
student.tail(5)
查詢指定的行
student.ix[ ] # 索引是字符串或數字,多行索引必須使用兩個中括號student.ix[[ ]]
student.loc[ ] # 索引字符串
student.iloc[ ] # 索引數字
查詢指定的列
student[列名] 或 student.列名
查詢多個列 student [['Name' , 'Height' , 'Weight']]
經過ix查詢指定的列
student [:,['Name' , 'Height' , 'Weight']]
查詢指定的行和列
student [[0,2,4],['Name' , 'Height' , 'Weight']]
下面經過布爾索引來實現特定信息的查詢
student[student['sex'] == F] --- 查詢全部性別爲女生的信息
student[(student['sex'] == F) & (stuent['age'] > 18)] -- 多條件查詢,查詢全部性別爲女且年齡大於18歲的信息
student[(student['sex'] == F) & (stuent['age'] > 18)] [['name' , 'height']] --查詢性別爲女,年齡大於18的學生的姓名 和 體重
四:統計分析
pandas模塊爲咱們提供了很是多的描述性統計分析的指標函數,如總和、均值、最小值、最大值等,咱們來具體看看這些函數:
首先隨機生成三組數據
np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)
d1.count() #非空元素計算
d1.min() #最小值
d1.max() #最大值
d1.idxmin() #最小值的位置,相似於R中的which.min函數
d1.idxmax() #最大值的位置,相似於R中的which.max函數
d1.quantile(0.1) #10%分位數
d1.sum() #求和
d1.mean() #均值
d1.median() #中位數
d1.mode() #衆數
d1.var() #方差
d1.std() #標準差
d1.mad() #平均絕對誤差
d1.skew() #偏度
d1.kurt() #峯度
d1.describe() #一次性輸出多個描述性統計指標
在實際的工做中,咱們可能須要處理的是一系列的數值型數據框,如何將這個函數應用到數據框中的每一列呢?可使用apply函數,這個很是相似於R中的apply的應用方法。
將以前建立的d1,d2,d3數據構建數據框:
df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=['x1','x2','x3'])
df.head()
df.apply(stats)
很是完美,就這樣很簡單的建立了數值型數據的統計性描述。若是是離散型數據呢?就不能用這個統計口徑了,咱們須要統計離散變量的觀測數、惟一值個數、衆數水平及個數。你只須要使用describe方法就能夠實現這樣的統計了。
student['Sex'].describe()
除以上的簡單描述性統計以外,還提供了連續變量的相關係數(corr)和協方差矩陣(cov)的求解,這個跟R語言是一致的用法。
df.corr()
關於相關係數的計算能夠調用pearson方法或kendell方法或spearman方法,默認使用pearson方法。
df.corr('spearman')
若是隻想關注某一個變量與其他變量的相關係數的話,可使用corrwith,以下方只關心x1與其他變量的相關係數:
df.corrwith(df['x1'])
數值型變量間的協方差矩陣
df.cov()
五:相似於SQL的操做
5.1)增長新行或新列
OUT:
雖然d2數據框只有3行1列,d3通過concat方法後,變成6行4列,d3的行數=d1的行數+d2的行數,d3的列數=d1的列數+d2的列數
新增一列--- 爲不存在的列賦值會建立新列,如 d1['four'] = 11
5.2) 刪除
1)刪除數據框 --- del d1
2) 刪除指定的行 ---d1.drop(['a' , 'b'] ) ,刪除 d1數據框索引值爲a和b的數據
3) 刪除指定的列 --- d1.drop('one' , 'two' ,axis =1) ,經過指定axis的值來代表是刪除列仍是行,axis默認值是0,0爲行,1爲列
4)布爾索引對數據框的查詢,實際上也是刪除數據操做,返回知足條件的數據
5.3)改,修改數據中的值
5.4)查,重點講解聚合、排序、多表連接操做
1)group by 聚合函數
若是不對聚合函數作限制的話,group by會對數值型數據進行聚合計算,如students數據框,有name,height,weight,sex,age列,name列是字符串,因此不會進行計算.
經過drop刪除該變量
groupby還能夠設置多個分組變量,例如對年齡和性別分組,來計算年齡和身高的平均值
還能夠對每一個分組進行多個統計量的計算,經過agg([ , ,])
2) 排序
在平常的統計工做中,排序是很重要的,能夠經過order , sort_index,sort_values實現序列和數據框的排序操做
1:order
s1 = dp.Series(np.array(np.random.randint(1,20,10)))
3) 多表鏈接
多表之間的鏈接也是很是常見的數據庫操做,鏈接份內鏈接和外鏈接,在數據庫語言中經過join關鍵字實現,pandas我比較建議使用merger函數實現數據的各類鏈接操做。
以下是構造一張學生的成績表
如今想把學生表student與學生成績表score作一個關聯,該如何操做呢?
注意,默認狀況下,merge函數實現的是兩個表之間的內鏈接,即返回兩張表中共同部分的數據。能夠經過how參數設置鏈接的方式,left爲左鏈接;right爲右鏈接;outer爲外鏈接。
左鏈接實現的是保留student表中的全部信息,同時將score表的信息與之配對,能配多少配多少,對於沒有配對上的Name,將會顯示成績爲NaN。
六:缺失值處理
現實生活中的數據是很是雜亂的,其中缺失值也是很是常見的,對於缺失值的存在可能會影響到後期的數據分析或挖掘工做,那麼咱們該如何處理這些缺失值呢?經常使用的有三大類方法,即刪除法、填補法和插值法。
刪除法:當數據中的某個變量大部分值都是缺失值,能夠考慮刪除改變量;當缺失值是隨機分佈的,且缺失的數量並非不少是,也能夠刪除這些缺失的觀測。
替補法:對於連續型變量,若是變量的分佈近似或就是正態分佈的話,能夠用均值替代那些缺失值;若是變量是有偏的,可使用中位數來代替那些缺失值;對於離散型變量,咱們通常用衆數去替換那些存在缺失的觀測。
插補法:插補法是基於蒙特卡洛模擬法,結合線性模型、廣義線性模型、決策樹等方法計算出來的預測值替換缺失值。
咱們這裏就介紹簡單的刪除法和替補法
這是一組含有缺失值的序列,咱們能夠結合sum函數和isnull函數來檢測數據中含有多少缺失值:
In [130]: sum(pd.isnull(s))
Out[130]: 9
直接刪除缺失值
默認狀況下,dropna會刪除任何含有缺失值的行,咱們再構造一個數據框試試:
返回結果代表,數據中只要含有缺失值NaN,該數據行就會被刪除,若是使用參數how=’all’,則代表只刪除全部行爲缺失值的觀測。
使用一個常量來填補缺失值,可使用fillna函數實現簡單的填補工做:
1)用0填補全部缺失值
2)採用前項填充或後向填充
3)使用常量填充不一樣的列
4)用均值或中位數填充各自的列
很顯然,在使用填充法時,相對於常數填充或前項、後項填充,使用各列的衆數、均值或中位數填充要更加合理一點,這也是工做中經常使用的一個快捷手段。
七:數據透視表
在Excel中有一個很是強大的功能就是數據透視表,經過托拉拽的方式能夠迅速的查看數據的聚合狀況,這裏的聚合能夠是計數、求和、均值、標準差等。
pandas爲咱們提供了很是強大的函數pivot_table(),該函數就是實現數據透視表功能的。對於上面所說的一些聚合函數,能夠經過參數aggfunc設定。咱們先看看這個函數的語法和參數吧:
pivot_table(data,values=None,
index=None,
columns=None,
aggfunc='mean',
fill_value=None,
margins=False,
dropna=True,
margins_name='All')
data:須要進行數據透視表操做的數據框
values:指定須要聚合的字段
index:指定某些原始變量做爲行索引
columns:指定哪些離散的分組變量
aggfunc:指定相應的聚合函數
fill_value:使用一個常數替代缺失值,默認不替換
margins:是否進行行或列的彙總,默認不彙總
dropna:默認全部觀測爲缺失的列
margins_name:默認行彙總或列彙總的名稱爲'All'
咱們仍然以student表爲例,來認識一下數據透視表pivot_table函數的用法:
對一個分組變量(Sex),一個數值變量(Height)做統計彙總
對一個分組變量(Sex),兩個數值變量(Height,Weight)做統計彙總
對兩個分組變量(Sex,Age),兩個數值變量(Height,Weight)做統計彙總
很顯然這樣的結果並不像Excel中預期的那樣,該如何變成列聯表的形式的?很簡單,只需將結果進行非堆疊操做(unstack)便可:
看,這樣的結果是否是比上面那種看起來更舒服一點?
使用多個聚合函數
有關更多數據透視表的操做,可參考《Pandas透視表(pivot_table)詳解》一文,連接地址:http://python.jobbole.com/81212/
最後咱們再來說講pandas中的一個重要功能,那就是多層索引。在序列中它能夠實如今一個軸上擁有多個索引,就相似於Excel中常見的這種形式:
對於這樣的數據格式有什麼好處呢?pandas能夠幫咱們實現用低維度形式處理高維數數據,這裏舉個例子也許你就能明白了:
對於這種多層次索引的序列,取數據就顯得很是簡單了:
對於這種多層次索引的序列,咱們還能夠很是方便的將其轉換爲數據框的形式:
以上針對的是序列的多層次索引,數據框也一樣有多層次的索引,並且每條軸上均可以有這樣的索引,就相似於Excel中常見的這種形式:
咱們不妨構造一個相似的高維數據框:
一樣,數據框中的多層索引也能夠很是便捷的取出大塊數據:
在數據框中使用多層索引,能夠將整個數據集控制在二維表結構中,這對於數據重塑和基於分組的操做(如數據透視表的生成)比較有幫助。
就拿student二維數據框爲例,咱們構造一個多層索引數據集:
講到這裏,咱們關於pandas模塊的學習基本完成,其實在掌握了pandas這8個主要的應用方法就能夠靈活的解決不少工做中的數據處理、統計分析等任務。有關更多的pandas介紹,可參考pandas官方文檔:http://pandas.pydata.org/pandas-docs/version/0.17.0/whatsnew.html。