Pandas | 23 分類數據

一般實時的數據包括重複的文本列。例如:性別,國家和代碼等特徵老是重複的。這些是分類數據的例子。python

分類變量只能採用有限的數量,並且一般是固定的數量。除了固定長度,分類數據可能有順序,但不能執行數字操做。 分類是Pandas數據類型。shell

分類數據類型在如下狀況下很是有用 -數組

  • 一個字符串變量,只包含幾個不一樣的值。將這樣的字符串變量轉換爲分類變量將會節省一些內存。
  • 變量的詞彙順序與邏輯順序("one""two""three")不一樣。 經過轉換爲分類並指定類別上的順序,排序和最小/最大將使用邏輯順序,而不是詞法順序。
  • 做爲其餘python庫的一個信號,這個列應該被看成一個分類變量(例如,使用合適的統計方法或plot類型)。

對象建立

分類對象能夠經過多種方式建立。下面介紹了不一樣的方法 -函數

類別/分類spa

經過在pandas對象建立中將dtype指定爲「category」code

import pandas as pd

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

輸出結果 -對象

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

傳遞給系列對象的元素數量是四個,但類別只有三個。觀察相同的輸出類別。blog

pd.Categorical排序

使用標準Pandas分類構造函數,咱們能夠建立一個類別對象。語法以下 -three

 
pandas.Categorical(values, categories, ordered)

舉個例子 -

 
import pandas as pd

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

輸出結果 -

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

再舉一個例子 -

 
import pandas as pd

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

輸出結果 -

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

這裏,第二個參數表示類別。所以,在類別中不存在的任何值將被視爲NaN

如今,看看下面的例子 -

import pandas as pd

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

輸出結果:

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

從邏輯上講,排序(ordered)意味着,a大於bb大於c

描述

使用分類數據上的.describe()命令,能夠獲得與類型字符串的Series或DataFrame相似的輸出。

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 ("=============================")
print (df["cat"].describe())

輸出結果:

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)

輸出結果:

Index(['b', 'a', '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)

輸出結果:

False
 

該函數返回結果爲:False,由於這裏沒有指定任何順序。

重命名類別

重命名類別是經過將新值分配給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)

輸出結果:

Index(['Group a', 'Group b', '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)
輸出結果:
Index(['a', 'b', '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("=====================================")
print ("After removal:")
print (s.cat.remove_categories("a"))

輸出結果:

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]
 

分類數據的比較

在三種狀況下能夠將分類數據與其餘對象進行比較 -

  • 將等號(==!=)與類別數據相同長度的相似列表的對象(列表,系列,數組…)進行比較。
  • ordered==True和類別是相同時,全部比較(==!=>>=<,和<=)分類數據到另外一個分類系列。
  • 將分類數據與標量進行比較。

看看下面的例子 -

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)

輸出結果:

0 False 1 False 2 True dtype: bool
相關文章
相關標籤/搜索