分类数据
一、cat对象
属性
category类型,使用户能够主力分类类型的变量,将普通序列转化为分类变量用astype方法。
对一个分类类型的Series中的cat对象类似于上一章的str对象
有两个组成部分,一个是index,另一个为是否有序
每一个序列会被赋予唯一的整数编号,取决于cat.categories
中的顺序,通过cat.codes
来访问
增删改
增加:add_categories
删除:remove_categories
,删除原来序列中存在的类后,此类再次查询时为缺失
设置新序列:set_categories
设置新的序列,若序列中没有此类则为缺失
删除未出现在序列中的类别: remove_unused_categories
改序列名:rename_categories
二、有序分类
序的建立
有序类别:as_ordered
无序类别:as_unordered
指定序列顺序:reorder_categories
排序与比较
将序列变量进行排序后,可以通过sort_index, sort_values
进行排序
比较有两种:
一是:==,!=
进行标量或长度的对比
二是:<,<=,>,>=
进行原序列排序的对比
返回值为布尔值
三、区间类别
利用cut和qcut进行区间构造
最重要的参数是 bins
,如果传入整数 n ,则代表把整个传入数组的按照最大和最小值等间距地分为 n 段
bins
的另一个常见用法是指定区间分割点的列表(使用 np.infty
可以表示无穷大)
labels
和 retbins
,分别代表了区间的名字和是否返回分割点(默认不返回)
qcut 和 cut 几乎没有差别,只是把 bins 参数变成的 q 参数
一般区间的构造
备三个要素,即左端点、右端点和端点的开闭状态,其中开闭状态可以指定 right, left, both, neither
中的一类
pd.Interval(0, 1, 'right')
其属性包含了 mid, length, right, left, closed
,分别表示中点、长度、右端点、左端点和开闭状态
pd.IntervalIndex
对象有四类方法生成,分别是 from_breaks, from_arrays, from_tuples, interval_range
from_breaks
的功能类似于 cut 或 qcut 函数,只不过后两个是通过计算得到的分割点,而前者是直接传入自定义的分割点
pd.IntervalIndex.from_breaks([1,3,6,10], closed='both')
from_arrays
是分别传入左端点和右端点的列表,适用于有交集并且知道起点和终点的情况
pd.IntervalIndex.from_arrays(left = [1,3,6,10],
right = [5,4,9,11],
closed = 'neither')
from_tuples
传入的是起点和终点元组构成的列表
pd.IntervalIndex.from_tuples([(1,5),(3,4),(6,9),(10,11)],
closed='neither')
一个等差的区间序列由起点、终点、区间个数和区间长度决定,其中三个量确定的情况下,剩下一个量就确定了, interval_range
中的 start, end, periods, freq
参数就对应了这四个量,从而就能构造出相应的区间
pd.interval_range(start=1,end=5,periods=8)
区间的属性与方法
IntervalIndex
有若干常用属性: left, right, mid, length
,分别表示左右端点、两端点均值和区间长度
contains 和 overlaps
,分别指逐个判断每个区间是否包含某元素,以及是否和一个 pd.Interval
对象有交集