Pandas数据分析学习打卡(三):Category分类数据
主要内容:
对于分类数据,我的理解是,实际中会存在一类数据,它的类别是固定的,只有几种或者分为几个档次,然后pandas中的分类数据就是为此而存在。
它的创建有好几种方法,可以pandas对象的创建中将dtype指定为“category”,也可以利用内置Categorical类型创建,或者利用cut函数创建:
pd.Series(["a", "b", "c", "a"], dtype="category")
cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])
pd.cut(np.random.randint(0,60,5), [0,10,30,60])
在打印创建好的Category数据时,会返回一个Categories信息,显示有哪些类别,类似于unique函数返回结果吧,用set_categories可以修改这个类别,但是不改变值,导致在类别中不存在的值会直接变成NaN,用rename_categories修改的话,它会同步修改值。同时还有其它操作:
利用add_categories添加;利用remove_categories移除;remove_unused_categories删除元素值未出现的分类类型。
分类数据类型被分为有序和无序,可以利用as_ordered方法将一个序列转为有序变量,而要退化为无序变量的话就使用as_unordered,或者利用set_categories方法中的order参数,令其等于True。reorder_categories方法也可以实现有序化,但是它新设置的分类必须与原分类为同一集合。然后是排序操作,这里没有新的方法,应该就是用Python内置的值排序和索引排序。
最后是分类变量的比较操作,用==、>=、<=、<、>,返回布尔序列,可以与标量或等长序列的比较,与另一分类变量的比较。
问题与练习:
【问题一】 如何使用union_categoricals方法?它的作用是什么?
【问题二】 利用concat方法将两个序列纵向拼接,它的结果一定是分类变量吗?什么情况下不是?
回答:这里把问题一 和问题二连起来回答:
首先,利用concat方法将两个序列纵向拼接,它的结果不一定是分类变量:
当类别不一样时: