Pandas知識點(diǎn)-排序操作 關(guān)注 共
3807字,需瀏覽
8分鐘
·
2021-03-19 12:13
數(shù)據(jù)處理過程中,經(jīng)常需要對數(shù)據(jù)進(jìn)行排序,使數(shù)據(jù)按指定的順序排列(升序或降序)。
在Pandas中,排序功能已經(jīng)實(shí)現(xiàn)好了,我們只需要調(diào)用對應(yīng)的方法即可。
一、數(shù)據(jù)讀取
數(shù)據(jù)文件是600519.csv,將此文件放到代碼同級目錄下,從文件中讀取出數(shù)據(jù)。
為了方便后面進(jìn)行排序操作,只讀取了數(shù)據(jù)中的前十行,并刪除了一些列,設(shè)置“日期”和“收盤價”為索引。
讀取的原始數(shù)據(jù)如上圖,本文基于這些數(shù)據(jù)來進(jìn)行排序操作。
二、DataFrame排序操作
1. 按索引進(jìn)行排序
sort_index(): 對DataFrame按索引排序。
一般情況下DataFrame的行索引都是單列索引,即數(shù)值型索引或指定的某一列作為行索引。如果行索引為多重索引,在不指定參數(shù)level時,會按多重索引中的第一個行索引進(jìn)行排序。
ascending: 排序默認(rèn)是升序排序,ascending參數(shù)默認(rèn)為True,將ascending參數(shù)設(shè)置成False則按降序排序。
axis: 排序默認(rèn)是按行索引排序(對每一行數(shù)據(jù)排序),axis參數(shù)默認(rèn)為0,將axis參數(shù)設(shè)置成1則按列索引排序(對每一列數(shù)據(jù)排序)。不過,在實(shí)際應(yīng)用中,對列排序的情況是極少的。
inplace: 在排序時,默認(rèn)返回一個新的DataFrame,inplace參數(shù)默認(rèn)為False,將inplace參數(shù)設(shè)置成True則對原DataFrame進(jìn)行排序,直接修改了數(shù)據(jù)本身,無返回值。無返回值時不能鏈?zhǔn)秸{(diào)用,如調(diào)用head(),將inplace設(shè)置成True時要注意。
2. 按多重索引進(jìn)行排序
level: 當(dāng)DataFrame的行索引為多重索引時,通過level參數(shù)可以指定按多重索引中的一個或多個行索引進(jìn)行排序,level參數(shù)默認(rèn)為None,按多重索引中的第一個行索引排序。如指定level為“收盤價”時,不再是按“日期”排序,而是按“收盤價”排序。
給level傳值時,可以傳入行索引的key(索引名),如:“日期”、“收盤價”,也可以傳入行索引的數(shù)值索引,如:0或1,0對應(yīng)“日期”,1對應(yīng)“收盤價”。
如果要按多重索引內(nèi)的多個行索引排序,可以給level傳入一個列表,這樣會先按列表中的第一個行索引排序,當(dāng)?shù)谝粋€行索引有相等的值時,再按第二個行索引進(jìn)行排序,以此類推。對應(yīng)的ascending可以傳入一個值,表示多個行索引都升序或都降序,如果要使多個行索引有升序有降序,可以給ascending傳入一個列表,列表長度與level的列表長度必須相等。
ignore_index: 如果DataFrame的行索引為多重索引,排序結(jié)果顯示的索引默認(rèn)是多重索引,ignore_index參數(shù)默認(rèn)為False,將ignore_index參數(shù)設(shè)置成True則結(jié)果中會隱藏多重索引,顯示成數(shù)值型索引(排序完成后從0開始編號)。
sort_remaining: 按多重索引排序時,按level指定的行索引排序后,默認(rèn)會繼續(xù)對剩余的行索引進(jìn)行排序,sort_remaining參數(shù)默認(rèn)為True。在上面的例子中,level指定按“收盤價”進(jìn)行降序排序,如果sort_remaining為True,按“收盤價”排序后,如果“收盤價”中有相等的值,會繼續(xù)按剩余的(level沒有指定的)行索引“日期”進(jìn)行降序排序。如果sort_remaining為False,則按“收盤價”排序后,排序就結(jié)束了,即使“收盤價”中有相等的值也不會繼續(xù)排序。
當(dāng)多重索引中不止兩個行索引時,如果level指定的行索引排序升降不一致(有升序有降序),即使sort_remaining為True,剩余的行索引也不會繼續(xù)排序。例如多重索引中有三個行索引,level指定了按前兩個索引排序,一個是升序一個是降序,此時即使sort_remaining為True,也不會繼續(xù)按第三個行索引排序。不過,在實(shí)際應(yīng)用中,這種情況極少。
繼續(xù)上面的情況,按多重索引中的第一個行索引排序后不繼續(xù)排序,如果第一個行索引中有相等的值,結(jié)果的順序是什么樣的呢?是不是保持原始數(shù)據(jù)的先后順序?
kind: 在sort_index()中默認(rèn)采用的排序算法是快速排序,kind參數(shù)默認(rèn)為quicksort(快速排序)??焖倥判蚴且环N不穩(wěn)定的排序算法,不能保證結(jié)果中值相等的數(shù)據(jù)保持先后順序。kind參數(shù)支持三種排序算法,另兩種是mergesort(歸并排序)和heapsort(堆排序),三種排序算法中只有歸并排序是穩(wěn)定的。但kind參數(shù)只支持單列的排序,不能用于按多重索引排序的情況。如果對每個行索引的排序都有要求,最好是通過level和ascending參數(shù)依次指定好。
3. 按指定列進(jìn)行排序
在按列排序前,請?zhí)貏e注意:按行索引排序和按列排序都是對行進(jìn)行排序,按列索引排序和按行排序都是對列進(jìn)行排序。 避免被繞暈了。
sort_values(): 對DataFrame按列排序。
by: sort_values()的第一個參數(shù)by是必傳參數(shù),傳入排序指定的基準(zhǔn)列,傳參可以用位置參數(shù)的方式,也可以用關(guān)鍵字參數(shù)的方式。如果對行排序,by參數(shù)必須傳入列索引中的值,如果對列排序,by參數(shù)必須傳入行索引中的值。 因為DataFrame中存儲的每一列數(shù)據(jù)類型通常不一樣,有些數(shù)據(jù)類型之間不支持排序,所以不一定能對列排序。
na_position: 在按指定列進(jìn)行排序時,如果此列數(shù)據(jù)中有空值(NaN),空值默認(rèn)排在最后面,na_position參數(shù)默認(rèn)為 last ,將na_position參數(shù)設(shè)置成 first 則空值排在最前面。na_position參數(shù)只支持按單列排序時使用,在按多重索引或按多列排序時無效。
sort_values()中,axis參數(shù)、ascending參數(shù)、inplace參數(shù)、kind參數(shù)、ignore_index參數(shù)的功能與sort_index()中一樣,不再贅述。
4. 按多個列進(jìn)行排序
給by參數(shù)傳入多個列索引值時(用列表的方式),即可以對多個列進(jìn)行排序。當(dāng)?shù)谝涣兄杏邢嗟鹊臄?shù)據(jù)時,依次按后面的列進(jìn)行排序。ascending參數(shù)的用法與按多重索引排序一樣。
三、Series排序操作
1. 按行索引進(jìn)行排序
sort_index(): 對Series按行索引排序。
Series是一維數(shù)據(jù),只有一列,不存在對列索引排序的情況,所以axis參數(shù)的值只能為0,不能設(shè)置成1,否則會報錯。
多重索引的排序與DataFrame一樣,不過,多重索引一般用于多維數(shù)據(jù)中,Series數(shù)據(jù)的行索引一般不會是多重索引。
對Series排序時,level參數(shù)、ascending參數(shù)、inplace參數(shù)、kind參數(shù)、na_position參數(shù)、sort_remaining參數(shù)、ignore_index參數(shù)的功能與DataFrame排序時一樣。 2. 按列進(jìn)行排序
sort_values(): 對Series按列排序。
Series只有一列數(shù)據(jù),所以按列排序時,不需要指定列,沒有by參數(shù),也不可以設(shè)置axis參數(shù)為1,否則會報錯。當(dāng)然也不存在基于多列排序的情況。
ascending參數(shù)、inplace參數(shù)、kind參數(shù)、na_position參數(shù)、ignore_index參數(shù)的功能與DataFrame排序時一樣。
四、排序方法總結(jié)
不管是對DataFrame排序還是對Series排序,方法名都一樣,sort_index()和sort_values()。 對DataFrame排序可以對行排序(按行索引或按列),也可以對列排序(按列索引或按行),不過,對列排序會受數(shù)據(jù)類型的限制。對Series排序只能對行排序(按行索引或按列)。 axis參數(shù)用于設(shè)置對行排序還是對列排序,Series排序時只能對行排序。level參數(shù)用于設(shè)置多重索引中排序的行索引,行索引不是多重索引時沒必要使用。ascending參數(shù)用于設(shè)置升序或降序排序。inplace參數(shù)用于設(shè)置是否對原數(shù)據(jù)修改,對原數(shù)據(jù)修改時沒有返回值,不能鏈?zhǔn)秸{(diào)用。kind參數(shù)用于設(shè)置使用的排序算法,在按多重索引排序和按多個列排序時無效。na_position參數(shù)用于設(shè)置空值排在最后面或最前面,在按多重索引排序和按多個列排序時無效。如果行索引是多重索引,ignore_index參數(shù)可以設(shè)置返回結(jié)果是否忽略多重索引,行索引不是多重索引時無效。按多重索引排序時,sort_remaining參數(shù)用于設(shè)置是否繼續(xù)按level沒有指定的行索引排序,如果level指定的行索引排序升降不統(tǒng)一則無效。
以上就是Pandas中的排序操作介紹,如果需要數(shù)據(jù)和代碼,可以點(diǎn)擊關(guān)注公眾號“Python碎片 ”,然后在后臺回復(fù)“pandas04 ”關(guān)鍵字獲取本文代碼和數(shù)據(jù)。
瀏覽
67 點(diǎn)贊
評論
收藏
分享
手機(jī)掃一掃分享
分享
舉報
點(diǎn)贊
評論
收藏
分享
手機(jī)掃一掃分享
分享
舉報
亚洲黄色视频在线观看网站
|
456亚洲人成影院观看方法
|
成人大香蕉电影
|
杨门后传之乱淫h侵犯杨门女将
|
成人网站在线进入爽爽爽
|
特级特黄A片一级一片亲下面
|
迷人的大乳秘书
|
三上悠亚被男上司在线播放
|
国内精品视频一区国产
|
久久久久无码国产精品一区
|