之前的文章里面談到過,我從R轉(zhuǎn)到Python上,一個很大的不習(xí)慣就是R的數(shù)據(jù)結(jié)構(gòu)比較簡單,但是Python的數(shù)據(jù)類型比較多,很容易就令人頭腦混亂。但是今天學(xué)習(xí)了一下Udacity的課程,頓時就清楚多了。 Python最基礎(chǔ)的數(shù)據(jù)類型包括數(shù)組、列表、字典比較常見的。而Numpy和Pandas的數(shù)據(jù)類型是在基礎(chǔ)數(shù)據(jù)類型上建立,彼此相關(guān),又彼此不同。 Numpy里面最基本的就是一維的對象np代指,這點我認(rèn)為和列表list基本沒有什么不同,很多操作(比如各種的for循環(huán))在list上實現(xiàn),同時也完全可以在numpy對象實現(xiàn)。但是numpy之所以是numpy,最重要的一點就是numpy向量化操作的特點,這點和R語言里面還是比較類似,當(dāng)然Matlab幾乎也是向量化操作。比較基礎(chǔ)的就是加減乘除的運算,當(dāng)然還有一點比較容易被忽略的就是np對象和if條件的使用。 例如 a=np.array([1,2,3,4,-1,-2,-3,-4]) ,b=np.array([-1,3,9,0,-2,9,3,-5)],想要找到a,b里面到底有多少個對元素在相同位置上正負(fù)號一致? 這里我要挖個坑,未來可能會做更多的練習(xí),會把我遇上的情況分享一下。 Pandas里面最基本的對象叫做Series。Series 和 np 有很多相類點,例如position 索引、切片、循環(huán)(for),以及一些基礎(chǔ)函數(shù)X.mean(),X.max(),X.argmax()。用法幾乎是一致的。要說最大的不同點,我認(rèn)為就是索引。Pandas的索引有兩種模式,一種是位置索引,例如a[0]、或者是a.iloc[0],iloc的意思是integer-location based indexing for selection by position ,還有一種是key索引(我自己這么叫的),例如a.loc['title'] ,loc的意思是 label-location based indexer for selection by label。這兩種不同的索引暴露了Series的本質(zhì),就是pandas對象本質(zhì)上是字典和列表的混合,這點很重要。 OK,這里做一個小結(jié):np對象最重要特點向量化運算,pandas對象最重要特點是字典和列表混合。 But,我在學(xué)習(xí)過程中還是有很多numpy & pandas 衍生出來的問題。嗯,今天就碰到了! Q1:有些函數(shù)忘記到底是應(yīng)用在pd 還是 np 上? A1:本來是想要去doc里面查查,一個個對比看看?,F(xiàn)在想著索性還是先了解一下兩個庫里面常用的函數(shù)或者屬性。 dataframe 常用屬性 numpy 常用屬性 可以這么理解,pandas常用的屬性基本都是數(shù)據(jù)操作類的;而numpy基本上都是數(shù)據(jù)基礎(chǔ)運算的,還有一個神級Lib Scipy 里面的常用函數(shù)是統(tǒng)計&優(yōu)化類的。 scipy 常用函數(shù) eg.分組統(tǒng)計、缺失值處理都是pd的管轄,生成隨機數(shù)等是numpy的管轄。 今天學(xué)了.dropna , .fillna 都是pd的屬性。 說實話,目前并沒有體會出numpy有什么卓越的優(yōu)越性,這個等我慢慢體會,這也需要是一篇文章! 來源:https://www.douban.com/note/635632989/ |
|