pandas内置数据集_【学习笔记】pandas分类数据

一、category的创建及其性质

通常实时的数据包括重复的文本列。例如:性别,国家和代码等特征总是重复的。这些是分类数据的例子。分类变量只能采用有限的数量,而且通常是固定的数量。除了固定长度,分类数据可能有顺序,但不能执行数字操作。 分类是Pandas数据类型。

1、分类变量的创建

(a)用Series创建

pd.Series(["a", "b", "c", "a"], dtype="category")

(b)对DataFrame指定类型创建

df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')})

(c)利用内置Categorical类型创建

cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])

(d)利用cut函数创建,又分为两种。

1、默认使用区间类型为标签

pd.cut(np.random.randint(0,60,5), [0,10,30,60])

2、可指定字符为标签

pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=['0-10','10-30','30-60'])

2、分类变量的结构

一个分类变量包括三个部分,元素值(values)、分类类别(categories)、是否有序(order)

下面介绍如何获取或修改这些属性:

(a)

describe

方法,该方法描述了一个分类序列的情况,包括非缺失值个数、元素值类别数(不是分类类别数)、最多次出现的元素及其频数

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))

s.describe()

输出:

count 4

unique 3

top a

freq 2

dtype: object

count

:非缺失值个数

unique

:唯一值的个数(缺失值np.nan不算)

top

:出现次数最多的元素

freq

:出现次数最多的元素,出现的次数,也就是上面top字符出现的次数

(b)categories和ordered属性,查看分类类别和是否排序

s.cat.categories

输出:

Index(['a', 'b', 'c', 'd'], dtype='object')

s.cat.ordered

输出:

False

3、类别的修改

(a)利用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'])

(b)利用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'})

(c)利用add_categories添加

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))

s.cat.add_categories(['e'])

(d)利用remove_categories移除

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))

s.cat.remove_categories(['d'])

(e)删除元素值未出现的分类类型

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))

s.cat.remove_unused_categories()

二、分类变量的排序

1、序的建立

(a)一般来说会将一个序列转为有序变量,可以利用as_ordered方法

s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered()

退化为无序变量,只需要使用as_unordered

s.cat.as_unordered()

(b)利用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)

三、分类变量的比较操作

1. 与标量或等长序列的比较

(a)标量比较

s = pd.Series(["a", "d", "c", "a"]).astype('category')

s == 'a'

输出:

0 True

1 False

2 False

3 True

dtype: bool

(b)等长序列比较

s == list('abcd')

输出:

0 True

1 False

2 True

3 False

dtype: bool

2、与另一个分类变量的比较

(a)等式判别(包含等号和不等号),两个分类变量的等式判别需要满足分类完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category')

s == s

输出:

0 True

1 True

2 True

3 True

dtype: bool

s != s

输出:

0 False

1 False

2 False

3 False

dtype: bool

(b)不等式判别(包含>=,<=,),两个分类变量的不等式判别需要满足两个条件:① 分类完全相同 ② 排序完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.reorder_categories(['a','c','d'],ordered=True)

s >= s

输出:

0 True

1 True

2 True

3 True

dtype: bool

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值