1. 程式人生 > 其它 >python及numpy,pandas易混淆的點

python及numpy,pandas易混淆的點

初接觸python覺得及其友好(類似matlab),尤其是一些令人拍案叫絕不可思議的簡單命令就可以完成非常複雜的計算,但是真正接觸一下就發現,python比matlab有很多不一樣的特性。

首先python的工具包(類似於C的庫函式)非常多,很多功能都有重複,所以選好包很重要,最簡單的選擇方法就是用時下最流行的包,社群比較活躍,遇到問題網上一搜很多答案,而且更新和維護也比較好。

在數值計算中常用的包就是numpy,pandas,scipy以及繪圖用的matplotlib。

Numpy

numpy的優勢是矩陣運算,最大的特點是引入了ndarray-多維陣列的概念。在ndarray中,每個[]就代表1維。這裡和matlab或者C++或者fortran都很不一樣,沒有行優先或者列優先的概念。但是numpy還有一個數據結構是mat。

個人覺得是為了便於使用以上語言的人們使用的。例如mat結構可以非常方便地做轉置(matName.T),求逆(matName.I),求伴隨矩陣(matName.A)

pandas

pandas的Series資料結構物件:類似於numpy的ndarray。

pd.Series(data),data可以是numpy的array或者python的列表都可以.

obj=pd.Series([4,7,-5,3])

obj.index 返回obj的索引

obj.values 返回obj的資料

如果在初始化的時候沒有指定索引,預設索引是從0開始到N-1的整數,也可以在初始化的時候就指定索引.

obj2=pd.Series([1,2,3],index=['a','b','c']) 這裡index=後面是['a','b','c'],也可以是別的列表物件.

Series物件的index還可以單獨賦值,例如obj2的index還可以這樣賦值:

obj2.index2=[....]

obj2['a']利用索引訪問資料。

字典結構是python的資料結構,pandas中的類似資料結構成為資料框架(DataFrame)。

可以把python字典型別的資料直接給Series物件,pandas會自動將key轉換為index,data還是data。

sdata={'a':1, 'b':2}

obj3=Series(sdata)

判斷是否是空pd.isnull(Series物件) 或者是 pd.notnull(Series物件)

Series物件也有判斷資料是否是空的函式.isnull()。

Series物件也可以有一些基本的算數運算,例如obj+obj2. 在具體執行時,對先比對index,對相同index的資料相加,如果obj有某個index而obj1沒有,則資料為NaN。

DataFrame的初始化

對於python的字典結構資料物件,可以直接建立pandas的DataFrame物件,例如:

data={'name':['Sara', 'Ben'],

'Age':[23,34]}

frame=pd.DataFrame(data)

得到一個column分別為name和age,index是0,1的DataFrame。DataFrame就是按照column和index組織起來的資料集合,類似於excel表格,也類似於基本的database結構。

column1   column2   column3
index1        data11      data12       data13
index2       data21      data22      data23
index3       data31      data32      data33
frame1=pd.DataFrame(data,column=[],index=[])

frame1.column 返回column列表,是index型別。

要訪問frame1中的某一列資料,可以用frame1['column_name']或者frame1.column_name,這兩種方式都可以。

行元素的獲取,可以用:frame.ix[index_name]

每列的資料都可以單獨賦值: frame.column_name=[....]

容易混淆/出錯的地方

生成0-N數列的函式:在python中是range(N+1),但是在numpy中是arange(N+1)。

陣列切片:

numpy的零矩陣 np.zeros((3,3)) 3維零矩陣,對於矩陣,形參必須是帶括號()的,即tuple型別。

改變多維陣列維數 np.reshape((dim1,dim2)) 必須是()的tuple型別。