Categorical类型

一 介绍

在数据中,一个列有可能会包含很多重复值,这时会对重复值进行分类。往往在使用过程中会通过unique、value_counts等函数对重复值进行唯一性的提取和重复个数的统计。而还有一类数据类型可以帮助统计对应的值和表示的键。这类数据在系统可以称为维度表,维度表包含了不同值,并将主要观测存储为引用维度的整数键。
可以通过如下例子进行展示,在例子代码中,这种按照整数展现的方式被称为分类或者字典编码展现。不同值的数组可以被称为数据的类别、字典或者层级。

import  numpy as np
import  pandas as pd
values  = pd.Series([0, 1, 0, 0]*2)
dim = pd.Series(['apple', 'orange'])
new_value = dim.take(values)
print(new_value)

代码显示的new_value结果为:
new_value结果
这种转换往往可以降低存储的开销,主要包括两个部分:1.重命名类别;2.在不改变已有的类别顺序下添加一个新的类别

二 Categorical对象

2.1 什么是Categorical

Categorical类型是Pandas拥有的一种特殊数据类型,这样的类型可以包含基于整数的类别展示和编码的数据。其存储的数据结构可以如下图展示,在图中可以看出数据的type为Category类型:
Categorical类型数据
在图中,可以看出categorical类型数据包括两列,一列是整数列,是对数据的表示,一列是源编码数据,是整数列表示的原意思。

2.2 Categorical实例的创建

1. 通过astype函数
(1)在Pandas中,Series数据类型,通过astype函数进行转换,可以生成Pandas.Categorical的实例

# 构造一个Series数据结构,并生成Categorical实例
fruit = pd.Series(['apple', 'orange', 'apple', 'apple']*2)
c_fruit = fruit.astype('category')
print(c_fruit)

代码的结果为:
Series转换的结果
(2)DataFrame的数据某一列,使用astype函数进行转换,可以生成Pandas.Categorical的实例

# 构造一个DataFrame数据结构,并生成一个Categorical实例
fruit = pd.Series(['apple', 'orange', 'apple', 'apple']*2)
df = pd.DataFrame({'fruit':fruit,
                   'basket_id': np.arange(8),
                   'count':np.random.randint(2, 16, size=8)})
c_dfruit = df['fruit'].astype('category')
print(c_dfruit)

在上述构造的DataFrame数据为:
DataFrame结果
输出的结果为:
DataFrame输出结果
2. 通过pd.Categorical直接创建
从其他Python序列类型直接生成pd.Categorical,进行创建,示例如下代码:

使用pd.Categorical来构造Categorical实例
my_categorical = pd.Categorical(['apple', 'orange', 'orange', 'apple', 'orange'])
print(my_categorical)

结果生成如下:
生成结果
3.使用Categorical的from_codes构造函数
如果已经从数据源获得了分类编码数据,使用这种方法非常便捷,实例代码如下:

# 使用from_codes构造函数构造Categorical实例
categories = ['apple', 'orange', 'banana']
codes = [0, 1, 2, 1, 0, 1]
my_categorical2 = pd.Categorical.from_codes(codes,categories)
print(my_categorical2)

输出结果如下:
输出的结果
4. 作为计算结果
在Pandas中,使用pandas.qcut分箱函数进行数据分析,返回的数据结果为Categorical实例
如下代码所示,创建了10个随机数,并对数据进行4分的分箱,并使用a,b,c,d来表示数据所在的分箱区间,通过展示如下,可以看出数据的返回结果为Categorical类型

# 作为qcut函数的结果返回Categorical实例
np.random.seed(12345)
draws = np.random.randn(10)
bins = pd.qcut(draws, 4, labels=['a', 'b', 'c', 'd'])
print(draws,'\n', bins)

分箱操作结果

三 Categorical的属性

Categorical对象拥有categories 和codes两个属性。Categories属性展示了数据的源编码,codes展示了当前的整数代表。如下代码所示:

# Categorical实例的属性
categories = ['apple', 'orange', 'banana']
codes = [0, 1, 2, 1, 0, 1]
get_Categorical = pd.Categorical.from_codes(codes,categories)

g_categories = get_Categorical.categories
g_codes = get_Categorical.codes

print(g_categories)
print(g_codes)

生成的get_Categorical数据展示如下:
get_Categorical
其中g_categories的输出结果为:
g_categories
g_codes的输出结果为:
g_codes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章