Pandas數(shù)據(jù)排序,人人都能學(xué)會(huì)的幾種方法
來源:Python數(shù)據(jù)之道 (ID:PyDataLab)
作者:陽哥
大家好,我是陽哥。
Pandas 可以說是 在Python數(shù)據(jù)科學(xué)領(lǐng)域應(yīng)用最為廣泛的工具之一。
Pandas是一種高效的數(shù)據(jù)處理庫,它以 dataframe 和 series 為基本數(shù)據(jù)類型,呈現(xiàn)出類似excel的二維數(shù)據(jù)。
在數(shù)據(jù)處理過程中,咱們經(jīng)常需要將數(shù)據(jù)按照一定的要求進(jìn)行排序,以方便展示。
這里,陽哥來給大家分享下 在 Pandas 中排序的幾種常用方法,主要包括 sort_index 和 sort_values 。
01 按索引排序
數(shù)據(jù)準(zhǔn)備
文中主要使用了 pandas 和 numpy ,首先導(dǎo)入 Python 庫,如下:
import pandas as pd
import numpy as np
print(f'pandas version: {pd.__version__}')
# pandas version 1.3.2
本次使用的數(shù)據(jù)如下:
data = {
'brand':['Python數(shù)據(jù)之道','價(jià)值前瞻','菜鳥數(shù)據(jù)之道','Python','Java'],
'B':[4,6,8,12,10],
'A':[10,2,5,20,16],
'D':[6,18,14,6,12],
'years':[4,1,1,30,30],
'C':[8,12,18,8,2],
}
index = [9,3,4,5,2]
df = pd.DataFrame(data=data,index=index)
df

按行索引排序
sort_index() 是 pandas 中按索引排序的函數(shù),默認(rèn)情況下, sort_index 是按行索引來排序。

通過設(shè)置參數(shù) ascending 可以設(shè)置升序或降序排列,默認(rèn)情況下是 ascending=True ,為升序排列。
設(shè)置 ascending=False 時(shí),為降序排列,如下:

按列的名稱排序
通過設(shè)置參數(shù) axis=1 可實(shí)現(xiàn)按列的名稱排序,如下:

同樣的,可以設(shè)置 參數(shù) ascending 的值,如下:

關(guān)于按列的名稱排序,更多的方法,可以參考下面的內(nèi)容:
02 按數(shù)值排序
sort_values() 是 pandas 中按數(shù)值排序的函數(shù)。
按單個(gè)列的值排序
sort_values() 中設(shè)置單個(gè)列的列名稱,可以對單個(gè)列進(jìn)行排序,通過設(shè)置參數(shù) ascending 可以設(shè)置升序或降序排列,如下:


按多個(gè)列的值排序
同時(shí),sort_values() 可以對多個(gè)列進(jìn)行不同的排序,通過設(shè)置列明和排序方式組合來實(shí)現(xiàn),如下:

設(shè)置參數(shù) ascending ,years 列為升序,B 列為降序,如下:

選擇排序算法
選擇排序算法,參數(shù) kind 默認(rèn)是 'quicksort',其他算法有 mergesort, heapsort, stable。
該參數(shù)只針對單個(gè)列時(shí)才有效。

在 numpy 的 sort文檔中,對幾種排序的特點(diǎn)進(jìn)行了描述,主要是程序運(yùn)行時(shí)占用的資源和運(yùn)行速度有差異。
numpy 文檔地址:
https://numpy.org/doc/stable/reference/generated/numpy.sort.html#numpy.sort

示例如下:

忽略索引
在排序過程中,還可以引入 ignore_index 參數(shù),來對行索引重新設(shè)置,如下:

inplace
inplace 是 pandas 中常見的一個(gè)參數(shù)。
inplace = True:不創(chuàng)建新的對象,直接對原始對象進(jìn)行修改;默認(rèn)是 False,即創(chuàng)建新的對象進(jìn)行修改,原對象不變,和深復(fù)制和淺復(fù)制有些類似。

缺失值
先構(gòu)造一個(gè)含缺失值的 dataframe,如下:
data = {
'brand':['Python數(shù)據(jù)之道','價(jià)值前瞻','菜鳥數(shù)據(jù)之道','Python','Java'],
'B':[4,6,8,np.nan,12],
'A':['Lemon','emma','ZW','app','John'],
'D':[6,18,14,6,12],
'years':[4,1,1,30,30],
'C':[8,12,18,8,2],
}
index = [9,3,4,5,2]
df1 = pd.DataFrame(data=data,index=index)
df1

缺失值排在最前面:

缺失值排在最后面:

key 參數(shù)
通過設(shè)置 key 參數(shù),可以將列按照特定條件進(jìn)行排序,對比下下面的排序:

◆ ◆ ◆ ◆ ◆
麟哥新書已經(jīng)在當(dāng)當(dāng)上架了,我寫了本書:《拿下Offer-數(shù)據(jù)分析師求職面試指南》,目前當(dāng)當(dāng)正在舉行活動(dòng),大家可以用相當(dāng)于原價(jià)5折的預(yù)購價(jià)格購買,還是非常劃算的:
數(shù)據(jù)森麟公眾號(hào)的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以掃描下方管理員二維碼,進(jìn)群前一定要關(guān)注公眾號(hào)奧,關(guān)注后讓管理員幫忙拉進(jìn)群,期待大家的加入。
管理員二維碼:
猜你喜歡

