python类别,category是什么数据类型
python_分类_类别方法发件人代码构造器
高级熊猫进口numpy作为NP进口熊猫作为pdnp。随机的。seed(12345)导入matplotlib。py绘图为pltplt。RC( figure ,figsize=(10,6))PREVIOUS _ MAX _ ROWS=PD。选项。展示。MAX _ ROWS PD选项。展示。MAX _ ROWS=20np。set _ print选项(precision=4,suppress=True)分类数据背景和动机#背景和的# 表中的列通常会有重复的包含不同值的集合的情况。我们已# 经学过了独一无二的和值计数,它们可以从数组提取出不同的# 值,并分别计算频率:导入数组为NP;将熊猫作为pdvalues=pd导入.系列([苹果,橘子,苹果,苹果]* 2)数值# PD。唯一(值)# PD。value _ counts(值)0苹果1橙2苹果3苹果4苹果5橙6苹果7苹果类型:对象#以使take法存储原始的字符串系列:使用拿加载系列数据值=pd .Series([0,1,0,0] * 2)dim=pd .系列([apple , orange])值im0 apple1 orangedtype:对象#使用拿分类分桶为分类或字典编码表示法# 这种整数表示的法称为分类或字典编码表示法。不同值得数# 组称为分类、字典或数据级。本书中,我们使分类的说法。表# 示分类的整数值称为分类编码或简单地称为编码。# 分类表示可以在进分析时的提性能。你也可以在保持编# 码不变的情况下,对分类进转换。些相对简单的转变例包# 括:# 重命名分类。# 加个新的分类,不改变已经存在的分类的顺序或位置暗淡。取(值)0苹果1橙0苹果0苹果0苹果1橙0苹果0苹果类型:熊猫熊猫中的对象分类类型的分类类型#熊猫有个特殊的分类类型,于保存使整数分类表示法# 的数据。看个之前的系列例:#熊猫的分类类型#熊猫有个特殊的分类类型,于保存使整数分类表示法# 的数据。看个之前的系列例:fruits=[苹果,桔子,苹果,苹果] * 2N=len(水果)df=pd .data frame({ fruit :fruit, basket_id: np.arange(N), count: np.random.randint(3,15,size=N), weight: np.random.uniform(0,4,size=N)},columns=[basket_id , fruit , count , weight ])df basket _ id fruit count weight 00 apple 53.85805805822 apple 42.97372的值不是NumPy数组,是个熊猫。绝对的实# 例:fruit_cat=df[水果]。astype(“类别”)水果_猫#水果_猫的值不是NumPy数组,是个熊猫。绝对的实# 例:0苹果1橘子2苹果3苹果4苹果5橘子6苹果7苹果名称:水果,dtype: categoryCategories (2,object):[苹果,橘子]c=水果_猫。价值观类型(c)熊猫。核心。数组。类别。类别#分类对象有种类和编码属性:c .类别c .代码数组([0,1,0,0,0,1,0,0],dtype=int8)你可将数据帧的列通过分配转换结果,转换为分类:# 你可将数据帧的列通过分配转换结果,转换为分类:df[果]=df[果]。astype( category )df。水果0苹果1桔子2苹果3苹果4苹果5桔子6苹果7苹果名称:水果,dtype: categoryCategories (2,object):[苹果,桔子]#还可以从其它计算机编程语言序列直接创建熊猫。分类:我的类别=pd .分类([foo , bar , baz , foo , bar])my_categories[foo,bar,baz,foo,bar]Categories (3,object): [bar,baz,foo]#如果你已经从其它源获得了分类编码,你还可以使from_codes#构造器:类别=[foo , bar , baz ]代码=[0,1,2,0,0,1]my_cats_2=pd .Categorical.from _ codes(代码,类别)my _ cats _ 2[福,吧,巴兹,福,福,吧]类别(3,对象):[foo,bar,baz]类别#与显示指定不同,分类变换不认定指定的分类顺序。
因此,根据# data输入的顺序,categories数组的顺序会有所不同。使用# from_codes或其他构造函数时,可以指定一个有意义的分类顺序:ordered _ cat=PD . category . from _ codes(codes,categories,ordered=true) ordered _ cat [foo,Bar,baz,foo,foo,Bar] categories (3,object):[foo bar baz]output[foo bar baz]表示 foo 在 bar 前面,以此类推。order #的分类实例可以按as_ordered排序:# output [foo bar baz]表示 foo 在 bar 之前,以此类推。order #的分类例子可以按as _ ordered:my _ cats _ 2 . as _ ordered()[foo,bar,baz,foo,foo,bar] categories (3,object):[foo bar baz]categories #归入calculation #的计算与编码版本(如string array)相似,这使得pandass #的分类有些相似。有些熊猫组件,比如groupby函数,更适合分类。还有一些函数可以使有序标志位。#让我们看一些随机的数值数据,做pandas.qcut元函数。它将回归#熊猫。Categorical我们之前用了pandas.cut,但是没有解释#分类是怎么做的:NP . random . seed(12345)draws=NP . randn . randn(1000)draws[:5]# draws array([-0.2047,0.0 -0.5194,-0.5557,1.9658])#计算这个数据的分位数,提取一些统计信息:bins=pd.qcut (draws,4) bins [(-0.684-0.0101], (0.63, 3.928],(-0.0101,0.63)、(-0.684、-0.0101)、(-2.949999999999997、-0.684)、(-0.0101,0.63)、(0.63,3.928]]长度:1000类(4,区间[float 64]): [(-2.9499999999997、-0series(bin,name=quartile )结果=(pd。系列(平局)。分组依据(箱)。agg([count , min , max])。reset _ index())resultssquartilecountmax 0q 1250-2.949343-0.6854841 q 2250-0.683066-0.0101152 q 3250-0.010320.2889434854包含排序:# quantile series保存原始元分类信息,包含排序:results[ quarter ]0q 11 q 22 q 3 q 4 name:quarter,dtype:categories(4DataFrame列的分类通常会使内存大大减少。#我们来看一些有几千万元素的系列,和一些不同的分类:n=1000000 drawings=PD . Series(NP . random . randn(n))labels=PD . Series([ foo , bar , baz , qux] * (n//)将标签转换为类别:#现在,将标签转换为类别:categories=labels . astype( category )#此时, 可以看到标签让内存的分类性大大提高:labels . memory _ usage()categories . memory _ usage()10000272 group by运算显然分类更快因为底层算法让整数代码编号# #转换成分类不是没有成本,但这是次要代价:# GroupBy运算显然分类更快,因为底层算法让整数代码编号# 487分组,而不是字符串数组。 % time _=labels . astype( category )wall time:705 ms分类方法# taxonomy #包含分类数据的Series有一些特殊的方法,类似于Series.str characters #的string方法。它还提供了方便的分类和编码方法。
请参阅# series: s=pd.series ([a , b , c , d]* 2)cat _ s=s . astype( category )cat _ s0a 1 B2C 3d 4 a5 B6 C7 DD type:category categories(4,Object): [a,b,c,d]#特殊的cat属性提供了分类:cat _ s . cat . codescat _ s . cat . categories index([ a , b , c , d ],dtype= object )假设我们知道实际数据#我们可以让set_categories方法更改它们#我们可以让set_categories方法改变它们:actual _ categories=[a , b , c , d ,e ]cat _ S2=cat _ s . cat . set _ categories(actual _ categories)cat _ s20a 1 B2 C3 D4 a5b 6 C7 DD type:categories categories(5,object): [A,b,c,d,E]虽然数据看起来没有变化,但是新的分类会反映在它们的操作中。比如# value_counts,如果有的话,表示分类:#虽然数据看起来没有变化,但是新的分类会反映在他们的操作中。例如,# value_counts(如果有)表示分类:cat _ s. value _ counts () cat _ s2。value _ counts()d2c2b 22 E0 dype:int 64。在键入数据集时,分类通常被用来方便地节省内存和性能。#筛选DataFrame或系列后,许多分类可能不会出现在数据中#。我们可以使用remove _ unused _ categories方法删除没有见过的类别#: #在键入数据集时,类别经常被用作节省内存和性能的便捷工具。#筛选DataFrame或系列后,许多分类可能不会出现在数据中#。我们可以让remove _ unused _ categories方法删除未见过的类别#: cat_s3=cat_s[cat_s.isin([a , B )]cat _ s3cat _ S3 . cat . remove _ unused _ categories()0 a1 B4 a5 BD type:category categories(2,object): [a,B]创建用于建模的哑变量#创建用于建模的哑变量# wxdlh在使用统计或机器学习工具时,分类数据通常会转换为哑#变量,也称为一热编码。这包括创建# DataFrame不同类别的列;对于给定的分类,这些列包含1,其他列包含0。#看前面的例子:cat _ s=pd.series ([a , b , d] * 2,dtype= category )cat _ s 0a 1 b 2c 3D 4 a 5b 6 C7 DD type:category categories(4,object): [a,b,c D]前面第7章提到过,pandas.get_dummies函数可以将这些以#为分类数据的数据转换成包含虚拟变量的数据帧:#前面第7章提到过,pandas.get_dummies函数可以将这些以#为分类数据的数据转换成a数据
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。