標籤:

python及numpy,pandas易混淆的點

正文共1849個字,5張圖,預計閱讀時間5分鐘。

初接觸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類型。

推薦閱讀:

python2.7的sort函數默認採用什麼排序演算法,適用於怎樣的數列的排序?
爬蟲入門到精通-網頁的解析(xpath)
*吧上有海外留學生問全部用遞歸求第N個質數,不能用循環
python Web 運維 爬蟲.....一條龍學習視頻教程

TAG:Python | numpy |