Python數據分析之pandas學習(一)

droidlxf 8年前發布 | 68K 次閱讀 Python Python開發 pandas

我們接著上次分享給大家的兩篇文章: Python數據分析之numpy學習(一)Python數據分析之numpy學習(二) ,繼續討論使用Python中的pandas模塊進行數據分。在接下來的兩期pandas介紹中將學習到如下8塊內容: 1、數據結構簡介:DataFrame和Series 2、數據索引index 3、利用pandas查詢數據 4、利用pandas的DataFrames進行統計分析 5、利用pandas實現SQL操作 6、利用pandas進行缺失值的處理 7、利用pandas實現Excel的數據透視表功能 8、多層索引的使用

一、數據結構介紹

在pandas中有兩類非常重要的數據結構,即序列Series和數據框DataFrame。Series類似于numpy中的一維數組,除了通吃一維數組可用的函數或方法,而且其可通過索引標簽的方式獲取數據,還具有索引的自動對齊功能;DataFrame類似于numpy中的二維數組,同樣可以通用numpy數組的函數和方法,而且還具有其他靈活應用,后續會介紹到。

1、Series的創建

序列的創建主要有三種方式:

1)通過一維數組創建序列

```python import numpy as np, pandas as pd arr1 = np.arange(10) arr1 type(arr1)

s1 = pd.Series(arr1) s1 type(s1) ```

2)通過字典的方式創建序列

```python dic1 = {'a':10,'b':20,'c':30,'d':40,'e':50} dic1 type(dic1)

s2 = pd.Series(dic1) s2 type(s2) ```

3)通過DataFrame中的某一行或某一列創建序列

這部分內容我們放在后面講,因為下面就開始將DataFrame的創建。

2、DataFrame的創建

數據框的創建主要有三種方式:

1)通過二維數組創建數據框

```python arr2 = np.array(np.arange(12)).reshape(4,3) arr2 type(arr2)

df1 = pd.DataFrame(arr2) df1 type(df1) ```

2)通過字典的方式創建數據框

以下以兩種字典來創建數據框,一個是字典列表,一個是嵌套字典。 ```python dic2 = {'a':[1,2,3,4],'b':[5,6,7,8], 'c':[9,10,11,12],'d':[13,14,15,16]} dic2 type(dic2)

df2 = pd.DataFrame(dic2) df2 type(df2)

dic3 = {'one':{'a':1,'b':2,'c':3,'d':4}, 'two':{'a':5,'b':6,'c':7,'d':8}, 'three':{'a':9,'b':10,'c':11,'d':12}} dic3 type(dic3)

df3 = pd.DataFrame(dic3) df3 type(df3) ```

3)通過數據框的方式創建數據框

```python df4 = df3[['one','three']] df4 type(df4)

s3 = df3['one'] s3 type(s3) ```

二、數據索引index

細致的朋友可能會發現一個現象,不論是序列也好,還是數據框也好,對象的最左邊總有一個非原始數據對象,這個是什么呢?不錯,就是我們接下來要介紹的索引。 在我看來,序列或數據框的索引有兩大用處,一個是通過索引值或索引標簽獲取目標數據,另一個是通過索引,可以使序列或數據框的計算、操作實現自動化對齊,下面我們就來看看這兩個功能的應用。

1、通過索引值或索引標簽獲取數據

python
s4 = pd.Series(np.array([1,1,2,3,5,8]))
s4
如果不給序列一個指定的索引值,則序列自動生成一個從0開始的自增索引。可以通過index查看序列的索引:
``

python s4.index

現在我們為序列設定一個自定義的索引值:
python
s4.index = ['a','b','c','d','e','f']
s4
``

序列有了索引,就可以通過索引值或索引標簽進行數據的獲取:

python
s4[3]
s4['e']
s4[[1,3,5]]
s4[['a','b','d','f']]
s4[:4]
s4['c':]
s4['b':'e']

2、自動化對齊

如果有兩個序列,需要對這兩個序列進行算術運算,這時索引的存在就體現的它的價值了--自動化對齊. ```python s5 = pd.Series(np.array([10,15,20,30,55,80]), index = ['a','b','c','d','e','f']) s5 s6 = pd.Series(np.array([12,11,13,15,14,16]), index = ['a','c','g','b','d','f']) s6

s5 + s6 s5/s6 ``` 由于s5中沒有對應的g索引,s6中沒有對應的e索引,所以數據的運算會產生兩個缺失值NaN。注意,這里的算術結果就實現了兩個序列索引的自動對齊,而非簡單的將兩個序列加總或相除。對于數據框的對齊,不僅僅是行索引的自動對齊,同時也會自動對齊列索引(變量名)

數據框中同樣有索引,而且數據框是二維數組的推廣,所以其不僅有行索引,而且還存在列索引,關于數據框中的索引相比于序列的應用要強大的多,這部分內容將放在數據查詢中講解。

三、利用pandas查詢數據

這里的查詢數據相當于R語言里的subset功能,可以通過布爾索引有針對的選取原數據的子集、指定行、指定列等。我們先導入一個student數據集: ```python student = pd.io.parsers.read_csv('C:\Users\admin\Desktop\student.csv')

查詢數據的前5行或末尾5行
python
student.head()
student.tail()
``

查詢指定的行 ```python student.ix[[0,2,4,5,7]] #這里的ix索引標簽函數必須是中括號[]

```

查詢指定的列 ```python student[['Name','Height','Weight']].head() #如果多個列的話,必須使用雙重中括號

```

也可以通過ix索引標簽查詢指定的列 ```python student.ix[:,['Name','Height','Weight']].head()

```

查詢指定的行和列 ```python student.ix[[0,2,4,5,7],['Name','Height','Weight']].head()

```

以上是從行或列的角度查詢數據的子集,現在我們來看看如何通過布爾索引實現數據的子集查詢。 查詢所有女生的信息

python
student[student['Sex']=='F']

查詢出所有12歲以上的女生信息

python
student[(student['Sex']=='F') & (student['Age']>12)]

查詢出所有12歲以上的女生姓名、身高和體重

python
student[(student['Sex']=='F') & (student['Age']>12)][['Name','Height','Weight']]

四、統計分析

pandas模塊為我們提供了非常多的描述性統計分析的指標函數,如總和、均值、最小值、最大值等,我們來具體看看這些函數: 首先隨機生成三組數據 ```python 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() #一次性輸出多個描述性統計指標 ``` 必須注意的是,descirbe方法只能針對序列或數據框,一維數組是沒有這個方法的

這里自定義一個函數,將這些統計描述指標全部匯總到一起:

python
def stats(x):
return pd.Series([x.count(),x.min(),x.idxmin(),
x.quantile(.25),x.median(),
x.quantile(.75),x.mean(),
x.max(),x.idxmax(),
x.mad(),x.var(),
x.std(),x.skew(),x.kurt()],
index = ['Count','Min','Whicn_Min',
'Q1','Median','Q3','Mean',
'Max','Which_Max','Mad',
'Var','Std','Skew','Kurt'])
stats(d1)

在實際的工作中,我們可能需要處理的是一系列的數值型數據框,如何將這個函數應用到數據框中的每一列呢?可以使用apply函數,這個非常類似于R中的apply的應用方法。 將之前創建的d1,d2,d3數據構建數據框:

python
df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=['x1','x2','x3'])
df.head()
df.apply(stats)
非常完美,就這樣很簡單的創建了數值型數據的統計性描述。如果是離散型數據呢?就不能用這個統計口徑了,我們需要統計離散變量的觀測數、唯一值個數、眾數水平及個數。你只需要使用describe方法就可以實現這樣的統計了。
``

除以上的簡單描述性統計之外,還提供了連續變量的相關系數(corr)和協方差矩陣(cov)的求解,這個跟R語言是一致的用法。

python
df.corr()
關于相關系數的計算可以調用pearson方法或kendell方法或spearman方法,默認使用pearson方法。
``

python df.corr('spearman')

如果只想關注某一個變量與其余變量的相關系數的話,可以使用corrwith,如下方只關心x1與其余變量的相關系數:
python
df.corrwith(df['x1'])
``

數值型變量間的協方差矩陣

python
df.cov()

數據人網作者:劉順祥 數據分析師,熱愛數據分析與挖掘工作,擅長使用R語言,目前自學Python語言。

數據人網是數據人學習、交流和分享的平臺http://shujuren.org 。專注于從數據中學習。 平臺的理念 :人人投稿,知識共享;人人分析,洞見驅動;智慧聚合,普惠人人。 您在數據人網平臺,可以1)學習數據知識;2)創建數據博客;3)認識數據朋友;4)尋找數據工作;5)找到其它與數據相關的干貨。 我們努力堅持做原創,分享和傳播數據知識干貨! 我們都是數據人,數據是有價值的,堅定不移地利用數據價值創造價值!

嚴禁修改,可以轉載,請注明出自數據人網。

 

來自:http://shujuren.org/article/207.html

 

Save

 本文由用戶 droidlxf 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!