一、category的创建及其性质
1.分类变量的创建
###使用Series创建
pd.Series(["a", "b", "c", "a"], dtype="category")
###对dataFrame指定类型创建
temp_df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')})
###利用内置Categorical类型创建
cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])
###利用cut函数创建
pd.cut(np.random.randint(0,60,5), [0,10,30,60]) ##使用默认区间类型为标签
pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=['0-10','10-30','30-60']) ##可指定字符为标签
- 分类变量的结构
一个分类变量包括三个部分:元素值(values)、分类类别(categories)、是否有序(order)。
#获取一个分类序列的情况,包括非缺失值个数、元素值类别数、最多次出现的元素及其频数
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
###查看分类类别
s.cat.categories
##查看是否排序
s.cat.ordered
- 类别的修改
##利用set_categories修改,修改分类,本身值不会变化
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.set_categories(['new_a','c'])
##利用rename_categories修改,该方法会把值和类同时修改
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'})
##利用add_categories添加
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.add_categories(['e'])
##利用remove_categories移除
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.remove_categories(['d'])
##删除元素值未出现的分类类型
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.remove_unused_categories()
二、分类变量的排序
前面提到,分类数据类型被分为有序和无序,这非常好理解,例如分数区间的高低是有序变量,考试科目的类别一般看做无序变量。
- 序的建立
##一般来说会将一个序列转为有序变量,可以利用as_ordered方法
s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered()
##退化为无序变量,只需要使用as_unordered
s.cat.as_unordered()
##利用set_categories方法中的order参数
pd.Series(["a", "d", "c", "a"]).astype('category').cat.set_categories(['a','c','d'],ordered=True)
#### (c)利用reorder_categories方法
#### 这个方法的特点在于,新设置的分类必须与原分类为同一集合
s = pd.Series(["a", "d", "c", "a"]).astype('category')
s.cat.reorder_categories(['a','c','d'],ordered=True)
2.排序
值排序与索引排序都是适用的
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()
df_sort = pd.DataFrame({'cat':s.values,'value':np.random.randn(50)}).set_index('cat')
df_sort.head()
df_sort.sort_index().head()
三、 分类变量的比较操作
- 与标量或等长序列的比较
s = pd.Series(["a","d","c","a"]).astype('category')
s == 'a'
s == list('abcd')
- 与另一分类变量的比较
##等式判别,两个分类变量的等式判别需要满足分类完全相同
s = pd.Series(["a", "d", "c", "a"]).astype('category')
s == s
##不等式判别, 两个分类变量的不等式判别需要满足两个条件:① 分类完全相同 ② 排序完全相同
s = pd.Series(["a", "d", "c", "a"]).astype('category')
#s >= s #报错
s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.reorder_categories(['a','c','d'],ordered=True)
s >= s
本文介绍了pandas中category类型的使用,包括分类变量的创建、性质、排序以及比较操作。详细阐述了如何创建和修改分类类别,以及有序和无序分类变量的区别,并探讨了分类数据的排序和比较方法。
1965

被折叠的 条评论
为什么被折叠?



