從零開(kāi)始學(xué)Python【4】--pandas(序列部分)
上一期我們介紹了數(shù)據(jù)分析中常用的numpy模塊凳兵,從數(shù)組的創(chuàng)建百新、元素的獲取企软、數(shù)學(xué)+統(tǒng)計(jì)函數(shù)庐扫、隨機(jī)數(shù)的生成、到外部文件的讀取仗哨。這期我們?cè)賮?lái)介紹另一個(gè)重磅的數(shù)據(jù)分析常用模塊--pandas形庭。該模塊更像是R語(yǔ)言中的向量、數(shù)據(jù)框的處理厌漂,接下來(lái)我們就一一介紹里面的小知識(shí)點(diǎn)萨醒。
序列
序列(Series)可以理解成是R語(yǔ)言中的向量,Python中的列表苇倡、元組的高級(jí)版本富纸。為什么說(shuō)是高級(jí)版本呢?因?yàn)樾蛄信c上期介紹的一維數(shù)組類(lèi)似旨椒,具有更好的廣播效應(yīng)晓褪,既可以與一個(gè)標(biāo)量進(jìn)行運(yùn)算,又可以進(jìn)行元素級(jí)函數(shù)的計(jì)算综慎。如下例子所示:
列表與常數(shù)10相加涣仿,報(bào)錯(cuò),顯示無(wú)法將列表與整形值連接示惊,“+”運(yùn)算在列表中是連接操作好港。
將上面的列表轉(zhuǎn)換成一個(gè)序列后,就可以正常的完成運(yùn)算米罚,這就是序列的廣播能力钧汹。同樣,列表也不能用于元素級(jí)的數(shù)學(xué)函數(shù)录择,對(duì)比如下:
除了上面介紹序列功能拔莱,再來(lái)說(shuō)說(shuō)其他序列常用的場(chǎng)景,如序列的索引糊肠、成員關(guān)系辨宠、排重、排序货裹、計(jì)數(shù)嗤形、抽樣、統(tǒng)計(jì)運(yùn)算等弧圆。
序列的索引:
由于序列是列表的擴(kuò)張版赋兵,故序列也有一套類(lèi)似于列表的索引方法笔咽,具體如下:
>need-to-insert-img
用倒數(shù)的方式取元素,序列就顯得不是很方便了霹期,我們推薦使用非常棒的iat方法叶组,該方法不管應(yīng)用于序列還是數(shù)據(jù)框都非常優(yōu)秀,主要體現(xiàn)在簡(jiǎn)介而高速历造。然而甩十,實(shí)際工作中很少通過(guò)位置索引(下標(biāo))的方法獲取到序列中的某些元素,例如1000個(gè)元素構(gòu)造的序列吭产,查出屬于某個(gè)范圍值總不能一個(gè)個(gè)去數(shù)吧侣监?序列提供了另一種索引的方法--布爾索引。具體用法如下:
我們知道臣淤,在R語(yǔ)言中一個(gè)向量的元素是否包含于另一個(gè)向量橄霉,可以使用%in%函數(shù)進(jìn)行判斷,同理邑蒋,Python中也有類(lèi)似的方法姓蜂。對(duì)于一個(gè)一維數(shù)組,in1d函數(shù)實(shí)現(xiàn)該功能医吊;對(duì)于一個(gè)序列钱慢,isin方法可實(shí)現(xiàn)該功能。
numpy模塊中的in1d函數(shù)也可以用于序列的成員關(guān)系的比較遮咖。
如果手中有一離散變量的序列滩字,想查看該序列都有哪些水平,以及各個(gè)水平的頻次御吞,該如何操作麦箍?
沒(méi)錯(cuò),只要借助于unique函數(shù)(與R語(yǔ)言一樣的函數(shù))實(shí)現(xiàn)序列的排重陶珠,獲得不同的水平值挟裂;通過(guò)使用value_counts函數(shù)(對(duì)應(yīng)于R語(yǔ)言的table函數(shù))對(duì)各個(gè)水平進(jìn)行計(jì)數(shù),并按頻次降序呈現(xiàn)揍诽。
有的時(shí)候需要對(duì)某個(gè)序列進(jìn)行升序或降序排序诀蓉,雖然這樣的場(chǎng)景并不多,但排序在數(shù)據(jù)框中的應(yīng)用還是非常常用的暑脆,先來(lái)看看如何對(duì)序列進(jìn)行排序:
s.sample(n=None, frac=None, replace=False, weights=None, random_state=None,axis=None)
n:指定抽取的樣本量渠啤;
frac:指定抽取的樣本比例;
replace:是否有放回抽樣添吗,默認(rèn)無(wú)放回沥曹;
weights:指定樣本抽中的概率,默認(rèn)等概論抽樣;
random_state:指定抽樣的隨機(jī)種子妓美;
抽樣也是數(shù)據(jù)分析中常用的方法僵腺,通過(guò)從總體中抽取出一定量的樣本來(lái)推斷總體水平;或者通過(guò)抽樣將數(shù)據(jù)拆分成兩部分壶栋,一部分建模辰如,一部分測(cè)試。pandas模塊提供了sample函數(shù)(與R語(yǔ)言的sample函數(shù)一致)幫我們完成抽樣的任務(wù)贵试。
由于總體就是男琉兜、女性別兩個(gè)值,故需要抽出10個(gè)樣本锡移,必須有放回的抽呕童,而且男女被抽中的概率還不一致漆际,女被抽中的概率是0.8淆珊。
統(tǒng)計(jì)運(yùn)算
pandas模塊提供了比numpy模塊更豐富的統(tǒng)計(jì)運(yùn)算函數(shù),而且還提供了類(lèi)似于R語(yǔ)言中的summary匯總函數(shù)奸汇,即describe函數(shù)施符。
其中count是序列中非缺失元素的個(gè)數(shù)。哦擂找,對(duì)了戳吝,如何判斷一個(gè)序列元素是否為缺失呢?可以使用isnull函數(shù)贯涎,等同于R語(yǔ)言中的is.na函數(shù)听哭。
除此,我們?cè)賮?lái)羅列一些常用的統(tǒng)計(jì)函數(shù):
s.min() # 最小值
s.quantile(q=[0,0.25,0.5,0.75,1]) # 分位數(shù)函數(shù)
s.median() # 中位數(shù)
s.mode() # 眾數(shù)
s.mean() # 平均值
s.mad() # 平均絕對(duì)誤差
s.max # 最大值
s.sum() # 和
s.std() # 標(biāo)準(zhǔn)差s.kurtosis() # 峰度
s.cumsum() # 和的累計(jì)塘雳,返回序列
s.cumprod() # 乘積的累積陆盘,返回序列
s.product() # 序列元素乘積
s.diff() # 序列差異(微分),返回序列
s.abs() # 絕對(duì)值败明,返回序列
s.pct_change() # 百分比變化 隘马,返回序列s.corr(s2) # 相關(guān)系數(shù)
s.ptp() # 極差 R中的range函數(shù)
今天我們的內(nèi)容就介紹到這邊,歡迎大家拍磚妻顶。下期我們來(lái)聊聊pandas模塊的數(shù)據(jù)框