我是靠谱客的博主 顺心小兔子,最近开发中收集的这篇文章主要介绍pandas 中 Category 的应用对 Categorical 数据的一个直观认识,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Categoricals 是 pandas 的一种数据类型,对应着被统计的变量。Categoricals 是由固定的且有限数量的变量组成的。比如:性别、社会阶层、血型、国籍、观察时段、赞美程度等等。

与其它被统计的变量相比,categorical 类型的数据可以具有特定的顺序——比如:按程度来设定,“强烈同意”与“同意”,“首次观察”与“二次观察”,但是不能做按数值来进行排序操作(比如:sort_by 之类的,换句话说,categorical 的顺序是创建时手工设定的,是静态的)

类型数据的每一个元素的值要么是预设好的类型中的某一个,要么是空值(np.nan)。顺序是由预设好的类型集合来决定的,而不是按照类型集合中各个元素的字母顺序排序的。categorical 实例的内部是由类型名字集合和一个整数组成的数组构成的,后者标明了类型集合真正的值。

对 Categorical 数据的一个直观认识

隐式创建 Categorical 数据

用一段代码从不同角度来展现一下 categorical 类型的数据。

# 先创建一个简单的 DataFrame 实例
# Terry, Hardon, Curry, Duran, James 和 Barter 代表东西部玩三打三
# 用一组数据记录各自的得分情况
import pandas as pd, numpy as np
players=['Garsol','Hardon','Bill','Duran','James','Barter']
scores=[22,34,12,31,26,19]
teams=['West','West','East','West','East','East']
df=pd.DataFrame({'player':players,'score':scores,'team':teams})
df

输出:


player
score
team
0
Garsol
22
West
1
Hardon
34
West
2
Bill
12
East
3
Duran
31
West
4
James
26
East
5
Barter
19
East

可以看出 team 这一列,其实只有两种值:East 和 West,可以将 team 列的类型设定为 category

df.team.astype('category')
0
West
1
West
2
East
3
West
4
East
5
East
Name: team, dtype: category
Categories (2, object): [East, West]

可以看到,df.team 的变量类型变成了 category。当然,迄今为止,这个分类是我们手工标记上去的,主动给每一个球员加上了 east 或者 west 的标记。那么,如果是动态的来添加呢?比如按照得分来划分,将高于平均分的划为 Star,低于平均分的划为 Role。计算过程就应该是这样:

d=pd.Series(scores).describe()
score_ranges=[d['min']-1,d['mean'],d['max']+1]
score_labels=['Role','Star']
# 用pd.cut(ori_data, bins, labels) 方法
# 以 bins 设定的画界点来将 ori_data 归类,然后用 labels 中对应的 label 来作为分类名
df['level']=pd.cut(df['score'],score_ranges,labels=score_labels)
print 'df :'
print df
print 'n对比一下 Category 类型的数据和普通的 DataFrame中的列有什么区别'
print 'ndf['team'] 是普通的 DataFrame列'
print df['team']
print 'ndf['level'] 是 Category 类型的'
print df['level']
print 'n可以看出 df['level'] 有点像是集合,输出信息会去重后列出组成元素'
print df['level'].get_values()
df :
player
score
team level
0
Garsol
22
West
Role
1
Hardon
34
West
Star
2
Bill
12
East
Role
3
Duran
31
West
Star
4
James
26
East
Star
5
Barter
19
East
Role
对比一下 Category 类型的数据和普通的 DataFrame中的列有什么区别
df['team'] 是普通的 DataFrame列
0
West
1
West
2
East
3
West
4
East
5
East
Name: team, dtype: object
df['level'] 是 Category 类型的
0
Role
1
Star
2
Role
3
Star
4
Star
5
Role
Name: level, dtype: category
Categories (2, object): [Role < Star]
可以看出 df['level'] 有点像是集合,输出信息会去重后列出组成元素
['Role' 'Star' 'Role' 'Star' 'Star' 'Role']

显式创建 Categorical 数据

cg=pd.Categorical(['Role','Role','Star','Role','Killer','Star'],categories=['Role', 'Star'])
cg
[Role, Role, Star, Role, NaN, Star]
Categories (2, object): [Role, Star]

可以看到,构造方法中第二个参数是指定了实例中可以包含的元素,在第一个参数中的元素如果不在 categories 中,就会被转成NaN。
Categorical 实例可以转为 Series,被称为 categorical series

s=pd.Series(cg)
s
0
Role
1
Role
2
Star
3
Role
4
NaN
5
Star
dtype: category
Categories (2, object): [Role, Star]

也可以将 categorical 实例加入到 dataframe 实例的某一列中,被称为 categorical dataframe column:

df=pd.DataFrame({'players':['Garsol','Hardon','Bill','Duran','James','Barter']})
df['level']=cg
print df['level'],'nn',df.dtypes
0
Role
1
Role
2
Star
3
Role
4
NaN
5
Star
Name: level, dtype: category
Categories (2, object): [Role, Star]
players
object
level
category
dtype: object


作者:那未必
链接:https://www.jianshu.com/p/20169d7f60bc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后

以上就是顺心小兔子为你收集整理的pandas 中 Category 的应用对 Categorical 数据的一个直观认识的全部内容,希望文章能够帮你解决pandas 中 Category 的应用对 Categorical 数据的一个直观认识所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部