Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析
CategoricalDtype自定義排序
當(dāng)我們的透視表生成完畢后,有很多情況下需要我們對(duì)某列或某行值進(jìn)行排序。排序有很多種方法。例如sort_index及sort_values函數(shù)也可以對(duì)數(shù)據(jù)進(jìn)行排序,這里就不多說(shuō)了。
對(duì)于數(shù)值和字母的排序很容易,但是對(duì)于中文的排序就有點(diǎn)麻煩了。默認(rèn)情況下是按照utf-8的編碼來(lái)進(jìn)行排序的但是即使如此也很難滿足我們對(duì)漢字排序的要求。所以通過(guò)CategoricalDtye可以把數(shù)據(jù)類型轉(zhuǎn)成Category類型
然后通過(guò)指定參數(shù)列表的順序來(lái)自定義那個(gè)元素先那個(gè)元素后,完全取決于你把那個(gè)元素放在List的前面,這樣就大大方便了我們對(duì)中文排序的操作。
代碼如下:
1. 自動(dòng)生成DataFrame數(shù)據(jù)
#%%import pandas as pdfrom datetime import datetimecity =['上海','北京','深圳','杭州','蘇州','青島','大連','齊齊哈爾','大理','麗江', '天津','濟(jì)南','南京','廣州','無(wú)錫','連云港','張家界']#創(chuàng)建自動(dòng)從list中選取valuse值的get_list函數(shù)#replace=True代表允許選出的元素重復(fù)def get_list(items,size=20): return pd.Series(items).sample(n=size,replace=True).to_list()#通過(guò)get_list自動(dòng)生成數(shù)據(jù),最終生成一個(gè)DataFramedf = pd.DataFrame({ '城市':get_list(city), '倉(cāng)位':get_list(['經(jīng)濟(jì)艙','商務(wù)艙','頭等艙']), '航線':get_list(['單程','往返']), '日期': get_list([datetime(2020,8,1),datetime(2020,8,2), datetime(2020,8,3),datetime(2020,8,4)]), '時(shí)間': get_list(['09:00 - 12:00', '13:00 - 15:30', '06:30 - 15:00', '18:00 - 21:00', '20:00 - 23:20', '10:00 - 15:00']), '航空公司': get_list(['東方航空','南方航空','深圳航空','山東航空','中國(guó)航空']), '出票數(shù)量':get_list([10,15,20,25,30,35,40,45,50,55,60]), })#%%df
結(jié)果如下:
2. 查看數(shù)據(jù)類型
#%%
df.dtypes
3. 自定義數(shù)據(jù)類型(Category)按照指定順序排序,并通過(guò)透視表展示數(shù)據(jù)
#%%#自定義type,以及自定義排序的順序my_type = pd.CategoricalDtype( categories=['頭等艙','商務(wù)艙','經(jīng)濟(jì)艙'], ordered=True)df['倉(cāng)位'] = df['倉(cāng)位'].astype(my_type) #將指定列轉(zhuǎn)成自定義的typedf.dtypes#%%#通過(guò)透視表統(tǒng)計(jì)數(shù)據(jù)tb = pd.pivot_table( df, index=['城市','倉(cāng)位','航線','日期','時(shí)間'], values='出票數(shù)量', aggfunc=sum)tb
先查看數(shù)據(jù)類型:可以看出倉(cāng)位的數(shù)據(jù)類型已經(jīng)從Object變成了category類型了。
結(jié)果為:
分析上述數(shù)據(jù)可以看出,我們把倉(cāng)位按照['頭等艙','商務(wù)艙','經(jīng)濟(jì)艙']的順序進(jìn)行了排序,排序結(jié)果也是按照這個(gè)順序排列的,成功的滿足了我們對(duì)中文列自定義排序的需求。
通過(guò)Pivot_table函數(shù)更加清晰的對(duì)原有數(shù)據(jù)進(jìn)行了展示。也可以按照自己的需求展示其中的一部分?jǐn)?shù)據(jù)。這樣對(duì)數(shù)據(jù)的清洗及展示變得更加的靈活。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python實(shí)現(xiàn)讀取類別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例2. python中PyQuery庫(kù)用法分享3. python操作數(shù)據(jù)庫(kù)獲取結(jié)果之fetchone和fetchall的區(qū)別說(shuō)明4. php5.6不能擴(kuò)展redis.so的解決方法5. Ajax實(shí)現(xiàn)頁(yè)面無(wú)刷新留言效果6. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫(huà)特效7. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值8. PHP獲取時(shí)間戳等相關(guān)函數(shù)匯總9. AJAX實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺(tái)】10. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)
