1、Pandas 分類數據
Pandas 分類數據的操作實例
數據通常實時包含重復的文本列。性別,國家/地區和代碼等功能始終是重復的。這些是分類數據的示例。
分類變量只能采用有限的且通常是固定數量的可能值。除固定長度外,分類數據可能還具有順序,但不能執行數字運算。分類是Pandas數據類型。
分類數據類型在以下情況下很有用
一個僅包含幾個不同值的字符串變量。將這樣的字符串變量轉換為分類變量將節省一些內存。
變量的詞匯順序與邏輯順序(“一個”,“兩個”,“三個”)不同。通過轉換為類別并在類別上指定順序,排序和最小/最大將使用邏輯順序而不是詞匯順序。
作為其他Python庫的信號,此列應視為分類變量(例如,使用適當的統計方法或繪圖類型)。
2、對象創建
分類對象可以通過多種方式創建。下面描述了不同的方式:
類別
通過在熊貓對象創建中將dtype指定為“ category”。
import pandas as pds = pd.Series(["a","b","c","a"], dtype="category")print(s)
運行結果
0 a1 b2 c3 adtype: categoryCategories (3, object): [a, b, c]
傳遞給series對象的元素數為4,但是類別僅為3。在輸出類別中觀察相同。
3、pd.Categorical
使用標準的熊貓分類構造器,我們可以創建一個類別對象。
pandas.Categorical(values, categories, ordered)
我們看一個實例-
import pandas as pdcat = 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 pdcat = 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 pdcat = 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]
從邏輯上講,該順序意味著a大于b且b大于c。
4、描述
使用.describe()的分類數據的命令,我們得到相似的輸出到一個系列或數據框的的類型的字符串。
import pandas as pdimport numpy as npcat = 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())
運行結果
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
5、獲取分類的屬性
obj.cat.categories命令用于獲取對象的類別。
import pandas as pdimport numpy as nps = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])print(s.categories)
運行結果
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered命令用于獲取對象的順序。
**import pandas as pdimport numpy as npcat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])print(cat.ordered)**
運行結果:
False
該函數返回false,因為我們未指定任何順序。
6、重命名分類
重命名類別是通過向series.cat.categories series.cat.categories屬性分配新值來完成的。
import pandas as pds = 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([u'Group a', u'Group b', u'Group c'], dtype='object')
初始類別[a,b,c]由對象的s.cat.categories屬性更新。
7、追加新類別
使用Categorical.add.categories()方法,可以追加新類別。
import pandas as pds = pd.Series(["a","b","c","a"], dtype="category")s = s.cat.add_categories([4])print(s.cat.categories)
運行結果
Index([u'a', u'b', u'c', 4], dtype='object')
8、刪除類別
使用Categorical.remove_categories()方法,可以刪除不需要的類別。
import pandas as pds = pd.Series(["a","b","c","a"], dtype="category")print(("Original object:"))print(s)print(("After removal:"))print(s.cat.remove_categories("a"))
運行結果
Original object:0 a1 b2 c3 adtype: categoryCategories (3, object): [a, b, c]After removal:0 NaN1 b2 c3 NaNdtype: categoryCategories (2, object): [b, c]
9、分類數據比較
在三種情況下可以將分類數據與其他對象進行比較:
將等于(和!=)與長度與分類數據相同的類似列表的對象(列表,序列,數組,…)進行比較。
當排序 True并且類別相同時,將類別數據與另一個類別系列的所有比較(==,!=,>,> =, <和<=)。< div>
分類數據與標量的所有比較。
看下面的實例:
import pandas as pdcat = 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 False1 False2 Truedtype: bool