Pandas 分類數(shù)據(jù)

Pandas 分類數(shù)據(jù)的操作實(shí)例

數(shù)據(jù)通常實(shí)時(shí)包含重復(fù)的文本列。性別,國家/地區(qū)和代碼等功能始終是重復(fù)的。這些是分類數(shù)據(jù)的示例。
分類變量只能采用有限的且通常是固定數(shù)量的可能值。除固定長度外,分類數(shù)據(jù)可能還具有順序,但不能執(zhí)行數(shù)字運(yùn)算。分類是Pandas數(shù)據(jù)類型。

分類數(shù)據(jù)類型在以下情況下很有用

一個(gè)僅包含幾個(gè)不同值的字符串變量。將這樣的字符串變量轉(zhuǎn)換為分類變量將節(jié)省一些內(nèi)存。

變量的詞匯順序與邏輯順序(“一個(gè)”,“兩個(gè)”,“三個(gè)”)不同。通過轉(zhuǎn)換為類別并在類別上指定順序,排序和最小/最大將使用邏輯順序而不是詞匯順序。

作為其他Python庫的信號,此列應(yīng)視為分類變量(例如,使用適當(dāng)?shù)慕y(tǒng)計(jì)方法或繪圖類型)。

對象創(chuàng)建

分類對象可以通過多種方式創(chuàng)建。下面描述了不同的方式:

類別

通過在熊貓對象創(chuàng)建中將dtype指定為“ category”。

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(s)

運(yùn)行結(jié)果如下:

 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3, object): [a, b, c]

傳遞給series對象的元素?cái)?shù)為4,但是類別僅為3。在輸出類別中觀察相同。

pd.Categorical

使用標(biāo)準(zhǔn)的熊貓分類構(gòu)造器,我們可以創(chuàng)建一個(gè)類別對象。

pandas.Categorical(values, categories, ordered)

我們看一個(gè)實(shí)例-

 import pandas as pd
 cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
 print(cat)

運(yùn)行結(jié)果如下:

 [a, b, c, a, b, c]
 Categories (3, object): [a, b, c]

讓我們再看一個(gè)實(shí)例

 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
 print(cat)

運(yùn)行結(jié)果如下:

 [a, b, c, a, b, c, NaN]
 Categories (3, object): [c, b, a]

在這里,第二個(gè)參數(shù)表示類別。因此,類別中不存在的任何值都將被視為NaN。
現(xiàn)在,看看以下示例:

 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
 print(cat)

運(yùn)行結(jié)果如下:

 [a, b, c, a, b, c, NaN]
 Categories (3, object): [c < b < a]

從邏輯上講,該順序意味著a大于b且b大于c。

描述

使用.describe()的分類數(shù)據(jù)的命令,我們得到相似的輸出到一個(gè)系列或數(shù)據(jù)框的的類型的字符串。

 import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
 print(df.describe())
 print(df["cat"].describe())

運(yùn)行結(jié)果如下:

    cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

獲取分類的屬性

obj.cat.categories命令用于獲取對象的類別。

 import pandas as pd
 import numpy as np
 s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(s.categories)

運(yùn)行結(jié)果如下:

  Index([u'b', u'a', u'c'], dtype='object')

obj.ordered命令用于獲取對象的順序。

 import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(cat.ordered)

運(yùn)行結(jié)果如下:

   False

該函數(shù)返回false,因?yàn)槲覀兾粗付ㄈ魏雾樞颉?/p>

重命名分類

重命名類別是通過向series.cat.categories series.cat.categories屬性分配新值來完成的。

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s.cat.categories = ["Group %s" % g for g in s.cat.categories]
 print(s.cat.categories)

運(yùn)行結(jié)果如下:

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

初始類別[a,b,c]由對象的s.cat.categories屬性更新。

追加新類別

使用Categorical.add.categories()方法,可以追加新類別。

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s = s.cat.add_categories([4])
 print(s.cat.categories)

運(yùn)行結(jié)果如下:

Index([u'a', u'b', u'c', 4], dtype='object')

刪除類別

使用Categorical.remove_categories()方法,可以刪除不需要的類別。

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(("Original object:"))
 print(s)
 print(("After removal:"))
 print(s.cat.remove_categories("a"))

運(yùn)行結(jié)果如下:

 Original object:
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3, object): [a, b, c]
 After removal:
 0 NaN
 1 b
 2 c
 3 NaN
 dtype: category
 Categories (2, object): [b, c]

分類數(shù)據(jù)比較

在三種情況下可以將分類數(shù)據(jù)與其他對象進(jìn)行比較:

將等于(==和!=)與長度與分類數(shù)據(jù)相同的類似列表的對象(列表,序列,數(shù)組,...)進(jìn)行比較。

當(dāng)排序== True并且類別相同時(shí),將類別數(shù)據(jù)與另一個(gè)類別系列的所有比較(==,!=,>,> =,  <和<=)。< div>    

分類數(shù)據(jù)與標(biāo)量的所有比較。

看下面的實(shí)例:

 import pandas as pd
 cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
 cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
 print(cat>cat1)

運(yùn)行結(jié)果如下:

 0  False
 1  False
 2  True
 dtype: bool

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清