Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析
CategoricalDtype自定義排序
當(dāng)我們的透視表生成完畢后,有很多情況下需要我們對某列或某行值進(jìn)行排序。排序有很多種方法。例如sort_index及sort_values函數(shù)也可以對數(shù)據(jù)進(jìn)行排序,這里就不多說了。
對于數(shù)值和字母的排序很容易,但是對于中文的排序就有點(diǎn)麻煩了。默認(rèn)情況下是按照utf-8的編碼來進(jìn)行排序的但是即使如此也很難滿足我們對漢字排序的要求。所以通過CategoricalDtye可以把數(shù)據(jù)類型轉(zhuǎn)成Category類型
然后通過指定參數(shù)列表的順序來自定義那個(gè)元素先那個(gè)元素后,完全取決于你把那個(gè)元素放在List的前面,這樣就大大方便了我們對中文排序的操作。
代碼如下:
1. 自動(dòng)生成DataFrame數(shù)據(jù)
#%% import pandas as pd from datetime import datetime city =["上海","北京","深圳","杭州","蘇州","青島","大連","齊齊哈爾","大理","麗江", "天津","濟(jì)南","南京","廣州","無錫","連云港","張家界"] #創(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() #通過get_list自動(dòng)生成數(shù)據(jù),最終生成一個(gè)DataFrame df = pd.DataFrame({ "城市":get_list(city), "倉位":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(["東方航空","南方航空","深圳航空","山東航空","中國航空"]), "出票數(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)按照指定順序排序,并通過透視表展示數(shù)據(jù)
#%% #自定義type,以及自定義排序的順序 my_type = pd.CategoricalDtype( categories=["頭等艙","商務(wù)艙","經(jīng)濟(jì)艙"], ordered=True ) df["倉位"] = df["倉位"].astype(my_type) #將指定列轉(zhuǎn)成自定義的type df.dtypes #%% #通過透視表統(tǒng)計(jì)數(shù)據(jù) tb = pd.pivot_table( df, index=["城市","倉位","航線","日期","時(shí)間"], values="出票數(shù)量", aggfunc=sum ) tb
先查看數(shù)據(jù)類型:可以看出倉位的數(shù)據(jù)類型已經(jīng)從Object變成了category類型了。
結(jié)果為:
分析上述數(shù)據(jù)可以看出,我們把倉位按照["頭等艙","商務(wù)艙","經(jīng)濟(jì)艙"]的順序進(jìn)行了排序,排序結(jié)果也是按照這個(gè)順序排列的,成功的滿足了我們對中文列自定義排序的需求。
通過Pivot_table函數(shù)更加清晰的對原有數(shù)據(jù)進(jìn)行了展示。也可以按照自己的需求展示其中的一部分?jǐn)?shù)據(jù)。這樣對數(shù)據(jù)的清洗及展示變得更加的靈活。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python3.10.4激活venv環(huán)境失敗解決方法
這篇文章主要介紹了Python3.10.4激活venv環(huán)境失敗解決方法的相關(guān)資料,需要的朋友可以參考下2023-01-01分享20個(gè)Pandas短小精悍的數(shù)據(jù)操作
本文為大家整理了一個(gè)pandas數(shù)據(jù)操作的大集合,共20個(gè)功能,個(gè)個(gè)短小精悍,一次讓你愛個(gè)夠,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-04-04python中enumerate函數(shù)用法實(shí)例分析
這篇文章主要介紹了python中enumerate函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了enumerate函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05Pycharm中配置遠(yuǎn)程Docker運(yùn)行環(huán)境的教程圖解
這篇文章主要介紹了Pycharm中配置遠(yuǎn)程Docker運(yùn)行環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Python實(shí)現(xiàn)將Word和Excel文件轉(zhuǎn)換為PPT
在日常工作中,我們經(jīng)常需要將多個(gè)Word文檔或Excel表格的內(nèi)容匯總到一個(gè)PPT演示文稿中,手動(dòng)執(zhí)行這項(xiàng)任務(wù)可能非常耗時(shí),因此,使用Python自動(dòng)化這個(gè)過程可以大大提高效率,所以本文給大家介紹了Python實(shí)現(xiàn)將Word和Excel文件轉(zhuǎn)換為PPT,需要的朋友可以參考下2024-08-08基于PyQt4和PySide實(shí)現(xiàn)輸入對話框效果
這篇文章主要為大家詳細(xì)介紹了基于PyQt4和PySide實(shí)現(xiàn)輸入對話框效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02Python常用算法學(xué)習(xí)基礎(chǔ)教程
這篇文章主要學(xué)習(xí)Python常用算法,Python常用排序算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一2017-04-04