分类变量的创建
用Series创建
print(pd.Series(["a", "b", "c", "a"], dtype="category"))
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
对DataFrame指定类型创建
print(pd.DataFrame({
'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')}).dtypes)
A category
B object
dtype: object
利用内置Categorical类型创建
print(pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c']))
print(pd.Series(pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])))
[a, b, c, a]
Categories (3, object): [a, b, c]
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
利用cut函数创建
print('默认使用区间类型为标签')
print(pd.cut(np.random.randint(0,60,5), [0,10,30,60]))
print('可指定字符为标签')
print(pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=['0-10','10-30','30-60']))
默认使用区间类型为标签
[(30, 60], (30, 60], (10, 30], (0, 10], (10, 30]]
Categories (3, interval[int64]): [(0, 10] < (10, 30] < (30, 60]]
可指定字符为标签
[10-30, 30-60, 10-30, 30-60, 0-10]
Categories (3, object): [0-10 < 10-30 < 30-60]
分类变量的结构与性质
一个分类变量包括三个部分,元素值(values)、分类类别(categories)、是否有序(order)。从上面可以看出,使用cut函数创建的分类变量默认为有序分类变量。
describe方法
该方法描述了一个分类序列的情况,包括非缺失值个数、元素值类别数(不是分类类别数)、最多次出现的元素及其频数
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
print(s.describe())
count 4
unique 3
top a
freq 2
dtype: object
categories和ordered属性
categories和ordered查看分类类别和是否排序
print(s.cat.categories)
print(s.cat.ordered)
Index(['a', 'b', 'c', 'd'], dtype='object')
False
利用set_categories修改类别
修改分类,但本身值不会变化
s