Datawhale - Pandas(下)--task03分类数据

数据的分类,在数据分析里很常见,学到这里,感觉是把excel里函数和编程融合在一起了,很方便。

一、分类的创建、分类类别的更改

1、可以用series创建,用Dataframe 和内置的Categorical来创建,或者利用cut函数创建(默认使用区间类型为标签)

pd.Series(["a", "b", "c", "a"], dtype="category")
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]
 
temp_df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')})
temp_df.dtypes
A    category
B      object
dtype: object
 
cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])
pd.Series(cat)
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]
pd.cut(np.random.randint(0,60,5), [0,10,30,60])
[(10, 30], (0, 10], (10, 30], (30, 60], (30, 60]]
Categories (3, interval[int6
NOTE:一个分类变量包括三个部分,元素值(values)、分类类别(categories)、是否有序(order);从上面可以看出,使用cut函数创建的分类变量默认为有序分类变量

二、对分类数据的排序

Pandas里有个概念:序。序的建立:

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

In [16]:
s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered()
s
0    a
1    d
2    c
3    a
dtype: category
Categories (3, object): [a < c < d]
 退化为无序变量,只需要使用as_unordered
s.cat.as_unordered()
0    a
1    d
2    c
3    a
dtype: category
Categories (3, object): [a, c, d]

(2)利用set_categories方法中的order参数

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

0    a
1    d
2    c
3    a
dtype: category
Categories (3, object): [a < c < d]
(3)利用reorder_categories方法【新设置的分类必须与原分类为同一集合】

三、分类数据的比较(例子再写)

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

(a)标量比较

(b)等长序列比较

2. 与另一分类变量的比较

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

(b)不等式判别(包含>=,<=,<,>)两个分类变量的不等式判别需要满足两个条件:① 分类完全相同 ② 排序完全相同
posted @ 2020-06-27 23:58  haiyanli  阅读(124)  评论(0编辑  收藏  举报