日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas中Category的应用

發布時間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas中Category的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 對 Categorical 數據的一個直觀認識
      • 隱式創建 Categorical 數據
      • 顯式創建 Categorical 數據

Categoricals 是 pandas 的一種 數據類型,對應著被統計的變量。Categoricals 是由固定的且有限數量的變量組成的。比如:性別、社會階層、血型、國籍、觀察時段、贊美程度等等。

與其它被統計的變量相比,categorical 類型的數據可以具有特定的順序——比如:按程度來設定,“強烈同意”與“同意”,“首次觀察”與“二次觀察”,但是不能做按數值來進行排序操作(比如:sort_by 之類的,換句話說,categorical 的順序是創建時手工設定的,是靜態的)。

類型數據的每一個元素的值要么是預設好的類型中的某一個,要么是空值(np.nan)。順序是由預設好的類型集合來決定的,而不是按照類型集合中各個元素的字母順序排序的。categorical 實例的內部是由類型名字集合和一個整數組成的數組構成的,后者標明了類型集合真正的值。

對 Categorical 數據的一個直觀認識

隱式創建 Categorical 數據

# 用一段代碼從不同角度來展現一下 categorical 類型的數據 # 先創建一個簡單的 DataFrame 實例 # Terry, Hardon, Curry, Duran, James 和 Barter 代表東西部玩三打三 # 用一組數據記錄各自的得分情況 import pandas as pd import numpy as npplayers = ['Garsol','Hardon','Bill','Duran','James','Barter'] teams = ['West','West','East','West','East','East'] scores = [22,34,12,31,26,19] df = pd.DataFrame({'player':players,'score':scores,'team':teams}) df playerscoreteam012345
Garsol22West
Hardon34West
Bill12East
Duran31West
James26East
Barter19East

可以看出 team 這一列,其實只有兩種值:East 和 West,可以將 team 列的類型設定為 category.

df.team 0 West 1 West 2 East 3 West 4 East 5 East Name: team, dtype: object df.team.astype('category') 0 West 1 West 2 East 3 West 4 East 5 East Name: team, dtype: category Categories (2, object): [East, West]

可以看到,df.team 的變量類型變成了 category。
當然,迄今為止,這個分類是我們手工標記上去的,主動給每一個球員加上了 east 或者 west 的標記。那么,如果是動態的來添加呢?比如按照得分來劃分,將高于平均分的劃為 Star,低于平均分的劃為 Role。
計算過程就應該是這樣:

d = pd.Series(scores).describe() d score_ranges = [d['min']-1,d['mean'],d['max']+1] score_ranges [11.0, 24.0, 35.0] score_labels = ['Role','Star'] score_labels ['Role', 'Star'] # 用pd.cut(ori_data, bins, labels) 方法 # 以 bins 設定的畫界點來將 ori_data 歸類,然后用 labels 中對應的 label 來作為分類名 df['level'] = pd.cut(df['score'],score_ranges,labels=score_labels) df['level'] 0 Role 1 Star 2 Role 3 Star 4 Star 5 Role Name: level, dtype: category Categories (2, object): [Role < Star] print('df:') print(df) print('\n對比一下 Category 類型的數據和普通的 DataFrame中的列有什么區別') print('\ndf[\'team\'] 是普通的 DataFrame列') print(df['team']) print('\ndf[\'level\'] 是 Category 類型的') print(df['level']) print('\n可以看出 df[\'level\'] 有點像是集合,輸出信息會去重后列出組成元素') print(df['level'].get_values()) df:player score team level 0 Garsol 22 West Role 1 Hardon 34 West Star 2 Bill 12 East Role 3 Duran 31 West Star 4 James 26 East Star 5 Barter 19 East Role對比一下 Category 類型的數據和普通的 DataFrame中的列有什么區別df['team'] 是普通的 DataFrame列 0 West 1 West 2 East 3 West 4 East 5 East Name: team, dtype: objectdf['level'] 是 Category 類型的 0 Role 1 Star 2 Role 3 Star 4 Star 5 Role Name: level, dtype: category Categories (2, object): [Role < Star]可以看出 df['level'] 有點像是集合,輸出信息會去重后列出組成元素 ['Role' 'Star' 'Role' 'Star' 'Star' 'Role']

顯式創建 Categorical 數據

cg = pd.Categorical(['Role','Role','Star','Role','Killer','Star'],categories=['Role', 'Star']) cg [Role, Role, Star, Role, NaN, Star] Categories (2, object): [Role, Star]

可以看到,構造方法中第二個參數是指定了實例中可以包含的元素,在第一個參數中的元素如果不在 categories 中,就會被轉成NaN。
Categorical 實例可以轉為 Series,被稱為 categorical series

s = pd.Series(cg) s 0 Role 1 Role 2 Star 3 Role 4 NaN 5 Star dtype: category Categories (2, object): [Role, Star]

也可以將 categorical 實例加入到 dataframe 實例的某一列中,被稱為 categorical dataframe column:

df = pd.DataFrame({'players':['Garsol','Hardon','Bill','Duran','James','Barter']}) df['level'] = cg print(df['level'],'\n\n',df.dtypes) 0 Role 1 Role 2 Star 3 Role 4 NaN 5 Star Name: level, dtype: category Categories (2, object): [Role, Star] players object level category dtype: object

作者:那未必
鏈接:https://www.jianshu.com/p/20169d7f60bc
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的pandas中Category的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。