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