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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Datawhale组队-Pandas(下)分类数据(打卡)

發(fā)布時(shí)間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Datawhale组队-Pandas(下)分类数据(打卡) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Categoricals是pandas的一種數(shù)據(jù)類(lèi)型,對(duì)應(yīng)于統(tǒng)計(jì)學(xué)中的Categorical variables(分類(lèi)變量),分類(lèi)變量是有限且固定的可能值,例如:gender(性別)、血型、國(guó)籍等,與統(tǒng)計(jì)學(xué)的Categorical variables相比,Categorical類(lèi)型的數(shù)據(jù)可以具有特定的順序,例如:按程度來(lái)設(shè)定:‘強(qiáng)烈同意’與‘同意’,‘首次觀察’與‘二次觀察’,但是不能按數(shù)值來(lái)進(jìn)行排序操作。

Categorical data的值要么是預(yù)設(shè)好的類(lèi)型中的某一個(gè),要么是空值(np.nan)。順序是由Categories來(lái)決定的,而不是按照Categories中各個(gè)元素的字母順序排序的。categories?實(shí)例的內(nèi)部是由類(lèi)型名字集合和一個(gè)整數(shù)組成的數(shù)組構(gòu)成的,后者標(biāo)明了類(lèi)型集合真正的值。

類(lèi)別數(shù)據(jù)型適用于以下場(chǎng)景:

  • 僅由幾個(gè)不同值組成的字符串變量。將這樣的字符串變量轉(zhuǎn)換成分類(lèi)變量將節(jié)省一些內(nèi)存;
  • 變量的詞匯順序不同于邏輯順序。通過(guò)轉(zhuǎn)換為類(lèi)別并指定類(lèi)別的順序,排序和最小/最大值將使用邏輯順序替代詞匯順序;
  • 作為對(duì)其他python庫(kù)的一個(gè)信號(hào),這個(gè)列應(yīng)該被視為一個(gè)分類(lèi)變量。

一、category的創(chuàng)建及其性質(zhì)

1.分類(lèi)變量的創(chuàng)建

(a)用Series創(chuàng)建

pd.Series(["a", "b", "c", "a"], dtype="category")

(b)用dataframe創(chuàng)建

temp_df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')}) temp_df.dtypes

(c)用內(nèi)置Categorical類(lèi)型創(chuàng)建

cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c']) pd.Series(cat)

(d)用cut函數(shù)創(chuàng)建

默認(rèn)使用區(qū)間類(lèi)型為標(biāo)簽

pd.cut(np.random.randint(0,60,5), [0,10,30,60])

可指定字符為標(biāo)簽

pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=['0-10','10-30','30-60'])

2.分類(lèi)變量的結(jié)構(gòu)

一個(gè)分類(lèi)變量包括三個(gè)部分,元素值(values)、分類(lèi)類(lèi)別(categories)、是否有序(order),使用cut函數(shù)創(chuàng)建的分類(lèi)變量默認(rèn)為有序分類(lèi)變量。

(a)describe方法

描述了一個(gè)分類(lèi)序列的情況,包括非缺失值個(gè)數(shù),元素值類(lèi)別數(shù)(不是分類(lèi)類(lèi)別數(shù))、最多出現(xiàn)的元素及其頻數(shù)

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.describe()

(b)categories和ordered屬性

查看分類(lèi)類(lèi)別和是否排序

#查看分類(lèi)類(lèi)別 print(s.cat.categories) #查看是否排序 print(s.cat.ordered)

3.類(lèi)別的修改

(a)利用set_categories修改

修改分類(lèi),但本身值不會(huì)變化

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.cat.set_categories(['new_a','c'])

(b)利用rename_categories修改

該方法是會(huì)把值和分類(lèi)同時(shí)修改

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.cat.rename_categories(['new_%s'%i for i in s.cat.categories])

利用字典修改值

s.cat.rename_categories({'a':'new_a','b':'new_b'})

(c)利用add_categories添加

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.cat.add_categories(['e'])

(d)利用remove_categories移除

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.cat.remove_categories(['d'])

(e)刪除元素值未出現(xiàn)的分類(lèi)類(lèi)型

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) s.cat.remove_unused_categories()

二、分類(lèi)變量的排序

分類(lèi)數(shù)據(jù)類(lèi)型分為有序和無(wú)序,

1.序的建立

(a)一般來(lái)說(shuō)會(huì)將一個(gè)序列轉(zhuǎn)為有序變量,可以利用as_ordered方法

s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered()

退化為無(wú)序變量,只需使用as_unordered

s.cat.as_unordered()

(b)利用set_categories方法中的order參數(shù)

pd.Series(["a","d","c","a"]).astype('category').cat.set_categories(['a','c','d'],ordered=True)

(c)利用reorder_categories方法

特點(diǎn)在于:新設(shè)置的分類(lèi)必須與原分類(lèi)為統(tǒng)一集合

s = pd.Series(["a", "d", "c", "a"]).astype('category') s.cat.reorder_categories(['a','c','d'],ordered=True) #s.cat.reorder_categories(['a','c'],ordered=True) #報(bào)錯(cuò) #s.cat.reorder_categories(['a','c','d','e'],ordered=True) #報(bào)錯(cuò)

2.排序

(a)值排序

s=pd.Series(np.random.choice(['perfect','good','fair','bad','awful'],50)).astype('category') s.cat.set_categories(['perfect','good','fair','bad','awful'][::-1],ordered=True).head() s.sort_values(ascending=False).head()

(b)索引排序

df_sort = pd.DataFrame({'cat':s.values,'value':np.random.randn(50)}).set_index('cat') df_sort.sort_index().head()

三、分類(lèi)變量的比較操作

1.與標(biāo)量或等長(zhǎng)序列的比較

(a)標(biāo)量比較

s = pd.Series(["a", "d", "c", "a"]).astype('category') s == 'a'

(b)等長(zhǎng)序列比較

s == list('abcd')

2.與另一分類(lèi)變量的比較

(a)等式判別(包含等號(hào)和不等號(hào))

兩個(gè)分類(lèi)變量的等式判別需要滿(mǎn)足分類(lèi)完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category') #等號(hào) s == s #不等于 s != s #s == s_new #報(bào)錯(cuò) s_new = s.cat.set_categories(['a','d','e'])

(b)不等式判別(包含>=,<=,<,>)

兩個(gè)分類(lèi)變量的不等式判別需要滿(mǎn)足兩個(gè)條件:① 分類(lèi)完全相同 ② 排序完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category') #s >= s #報(bào)錯(cuò)s=pd.Series(["a","d","c","a"]).astype('category').cat.reorder_categories(['a','c','d'],ordered=True) s >= s

練習(xí)1:

(a)現(xiàn)在將深度分為七個(gè)等級(jí):[0,5,10,15,20,30,50,np.inf],請(qǐng)以深度等級(jí)Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ為索引并按照由淺到深的順序進(jìn)行排序。

df['new_深度'] = pd.cut(df['深度'],[0,5,10,15,20,30,50,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ']) df.set_index('new_深度').sort_index().head()

(b)在(a)的基礎(chǔ)上,將烈度分為4個(gè)等級(jí):[0,3,4,5,np.inf],依次對(duì)南部地區(qū)的深度和烈度等級(jí)建立多級(jí)索引排序。

df['new_深度'] = pd.cut(df['深度'],[0,5,10,15,20,30,50,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ']) df['new_烈度'] = pd.cut(df['烈度'],[0,3,4,5,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ']) df.set_index(['new_深度','new_烈度']).sort_index().head()

可以看到按烈度排序的話(huà),直接從Ⅱ開(kāi)始的,所以,更改一下數(shù)據(jù)范圍:

df['new_深度'] = pd.cut(df['深度'],[0,5,10,15,20,30,50,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ']) df['new_烈度'] = pd.cut(df['烈度'],[-1e-10,3,4,5,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ']) df.set_index(['new_深度','new_烈度']).sort_index().head()

總結(jié)

以上是生活随笔為你收集整理的Datawhale组队-Pandas(下)分类数据(打卡)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。