08-python-pandas-category

8. Pandas高级教程之:category数据类型

简介

Pandas中有一种特殊的数据类型叫做category。它表示的是一个类别,一般用在统计分类中,比如性别,血型,分类,级别等等。有点像java中的enum。

今天给大家详细讲解一下category的用法。

创建category

使用Series创建

在创建Series的同时添加dtype="category"就可以创建好category了。category分为两部分,一部分是order,一部分是字面量:

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

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

可以将DF中的Series转换为category:

可以创建好一个pandas.Categorical ,将其作为参数传递给Series:

使用DF创建

创建DataFrame的时候,也可以传入 dtype="category":

DF中的A和B都是一个category:

或者使用df.astype("category")将DF中所有的Series转换为category:

创建控制

默认情况下传入dtype='category' 创建出来的category使用的是默认值:

  1. Categories是从数据中推断出来的。

  2. Categories是没有大小顺序的。

可以显示创建CategoricalDtype来修改上面的两个默认值:

同样的CategoricalDtype还可以用在DF中:

转换为原始类型

使用Series.astype(original_dtype) 或者 np.asarray(categorical)可以将Category转换为原始类型:

categories的操作

获取category的属性

Categorical数据有 categoriesordered 两个属性。可以通过s.cat.categoriess.cat.ordered来获取:

重排category的顺序:

重命名categories

通过给s.cat.categories赋值可以重命名categories:

使用rename_categories可以达到同样的效果:

或者使用字典对象:

使用add_categories添加category

可以使用add_categories来添加category:

使用remove_categories删除category

删除未使用的cagtegory

重置cagtegory

使用set_categories()可以同时进行添加和删除category操作:

category排序

如果category创建的时候带有 ordered=True , 那么可以对其进行排序操作:

可以使用 as_ordered() 或者 as_unordered() 来强制排序或者不排序:

重排序

使用Categorical.reorder_categories() 可以对现有的category进行重排序:

多列排序

sort_values 支持多列进行排序:

比较操作

如果创建的时候设置了ordered==True ,那么category之间就可以进行比较操作。支持 ==, !=, >, >=, <, 和 <=这些操作符。

其他操作

Cagetory本质上来说还是一个Series,所以Series的操作category基本上都可以使用,比如: Series.min(), Series.max() 和 Series.mode()。

value_counts:

DataFrame.sum():

Groupby:

Pivot tables:

本文已收录于 www.flydean.com

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

最后更新于

这有帮助吗?