找回密码
 会员注册
查看: 32|回复: 0

Python酷库之旅-第三方库Pandas(018)

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-10 01:37:20 | 显示全部楼层 |阅读模式
目录一、用法精讲44、pandas.crosstab函数44-1、语法44-2、参数44-3、功能44-4、返回值44-5、说明44-6、用法44-6-1、数据准备44-6-2、代码示例44-6-3、结果输出45、pandas.cut函数45-1、语法45-2、参数45-3、功能45-4、返回值45-5、说明45-6、用法45-6-1、数据准备45-6-2、代码示例45-6-3、结果输出 46、pandas.qcut函数46-1、语法46-2、参数46-3、功能46-4、返回值46-5、说明46-6、用法46-6-1、数据准备46-6-2、代码示例46-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲44、pandas.crosstab函数44-1、语法#44、pandas.crosstab函数pandas.crosstab(index,columns,values=None,rownames=None,colnames=None,aggfunc=None,margins=False,margins_name='All',dropna=True,normalize=False)Computeasimplecrosstabulationoftwo(ormore)factors.Bydefault,computesafrequencytableofthefactorsunlessanarrayofvaluesandanaggregationfunctionarepassed.Parameters:indexarray-like,Series,orlistofarrays/SeriesValuestogroupbyintherows.columnsarray-like,Series,orlistofarrays/SeriesValuestogroupbyinthecolumns.valuesarray-like,optionalArrayofvaluestoaggregateaccordingtothefactors.Requiresaggfuncbespecified.rownamessequence,defaultNoneIfpassed,mustmatchnumberofrowarrayspassed.colnamessequence,defaultNoneIfpassed,mustmatchnumberofcolumnarrayspassed.aggfuncfunction,optionalIfspecified,requiresvaluesbespecifiedaswell.marginsbool,defaultFalseAddrow/columnmargins(subtotals).margins_namestr,default‘All’Nameoftherow/columnthatwillcontainthetotalswhenmarginsisTrue.dropnabool,defaultTrueDonotincludecolumnswhoseentriesareallNaN.normalizebool,{‘all’,‘index’,‘columns’},or{0,1},defaultFalseNormalizebydividingallvaluesbythesumofvalues.Ifpassed‘all’orTrue,willnormalizeoverallvalues.Ifpassed‘index’willnormalizeovereachrow.Ifpassed‘columns’willnormalizeovereachcolumn.IfmarginsisTrue,willalsonormalizemarginvalues.ReturnsataFrameCrosstabulationofthedata.44-2、参数44-2-1、index(必须):用于交叉表的行索引的数组或序列,这通常是DataFrame中的一列或多列,用于确定交叉表的行。44-2-2、columns(必须):用于交叉表的列索引的数组或序列,这同样是DataFrame中的一列或多列,用于确定交叉表的列。44-2-3、values(可选,默认值为None):如果提供,它应该是DataFrame中的一列,其值将根据aggfunc参数指定的函数进行聚合,以填充交叉表的单元格;如果不提供,则默认计算每个组合中的观测数(即计数)。44-2-4、rownames/colnames(可选,默认值为None):在较新版本的pandas中,这两个参数可能已被弃用或不再使用,它们原本用于为行和列索引提供自定义名称,但现在通常建议直接使用index和columns参数的列名作为行和列索引的名称。44-2-5、aggfunc(可选,默认值为None):用于聚合values参数指定的值的函数,如果values为None,则默认为'count',即计算每个组合的观测数,其他函数有'sum'、'mean'、'max'、'min'等。44-2-6、margins(可选,默认值为False):布尔值,如果为True,则会在交叉表的末尾添加一个全行/全列,包含所有值的聚合(基于aggfunc)。44-2-7、margins_name(可选,默认值为'All'):字符串,当margins=True时,用于命名全行/全列的标签。44-2-8、dropna(可选,默认值为True):布尔值,如果为True,则会从结果中删除包含缺失值的行或列(取决于index和columns中的缺失值);如果为False,则包含缺失值的组合也会出现在交叉表中,但它们的值将取决于aggfunc和values的设置。44-2-9、normalize(可选,默认值为False):布尔值或字符串('index'或'columns'),如果为True,则会对值进行归一化处理,使得每个行(或列,取决于归一化方式)的总和等于1;如果为'index',则对每行进行归一化;如果为'columns',则对每列进行归一化。44-3、功能        用于创建交叉表(也称为列联表或频数表)。44-4、返回值        返回值是一个新的DataFrame,该DataFrame展示了基于index和columns参数指定的行和列索引的交叉表。44-5、说明44-5-1、如果未指定values和aggfunc参数,则交叉表中的值默认为每个组合的观测数量。44-5-2、如果指定了values和aggfunc参数,则交叉表中的值是根据aggfunc指定的聚合函数对values中的值进行聚合得到的结果。44-5-3、如果margins参数为True,则返回的DataFrame还会包含一个额外的全行和/或全列(取决于margins的具体设置),用于显示所有行和/或列的总和。44-5-4、如果normalize参数为True或'all',则交叉表中的值会被归一化,使得每行或每列(或整个交叉表)的总和等于1;如果normalize为'index'或'columns',则分别对每行或每列进行归一化。44-6、用法44-6-1、数据准备无44-6-2、代码示例#44、pandas.crosstab函数importpandasaspdimportnumpyasnp#创建一个示例数据集data={'Date':pd.date_range('2023-01-01',periods=6,freq='D'),'City':['NewYork','LosAngeles','NewYork','LosAngeles','NewYork','LosAngeles'],'Category':['A','A','B','B','A','B'],'Values':[100,200,150,250,np.nan,300]}df=pd.DataFrame(data)print("原始数据集:")print(df)#使用crosstab函数创建交叉表crosstab_result=pd.crosstab(index=[df['Date'],df['City']],columns=df['Category'],values=df['Values'],rownames=['Date','City'],colnames=['Category'],aggfunc='sum',margins=True,margins_name='All',dropna=True,normalize=False)print("\ncrosstab结果:")print(crosstab_result)44-6-3、结果输出#44、pandas.crosstab函数#原始数据集:#DateCityCategoryValues#02023-01-01NewYorkA100.0#12023-01-02LosAngelesA200.0#22023-01-03NewYorkB150.0#32023-01-04LosAngelesB250.0#42023-01-05NewYorkANaN#52023-01-06LosAngelesB300.0#crosstab结果:#CategoryABAll#DateCity#2023-01-0100:00:00NewYork100.0NaN100.0#2023-01-0200:00:00LosAngeles200.0NaN200.0#2023-01-0300:00:00NewYorkNaN150.0150.0#2023-01-0400:00:00LosAngelesNaN250.0250.0#2023-01-0500:00:00NewYork0.0NaNNaN#2023-01-0600:00:00LosAngelesNaN300.0300.0#All300.0700.01000.045、pandas.cut函数45-1、语法#45、pandas.cut函数pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False,duplicates='raise',ordered=True)Binvaluesintodiscreteintervals.Usecutwhenyouneedtosegmentandsortdatavaluesintobins.Thisfunctionisalsousefulforgoingfromacontinuousvariabletoacategoricalvariable.Forexample,cutcouldconvertagestogroupsofageranges.Supportsbinningintoanequalnumberofbins,orapre-specifiedarrayofbins.Parameters:xarray-likeTheinputarraytobebinned.Mustbe1-dimensional.binsint,sequenceofscalars,orIntervalIndexThecriteriatobinby.intefinesthenumberofequal-widthbinsintherangeofx.Therangeofxisextendedby.1%oneachsidetoincludetheminimumandmaximumvaluesofx.sequenceofscalarsefinesthebinedgesallowingfornon-uniformwidth.Noextensionoftherangeofxisdone.IntervalIndexefinestheexactbinstobeused.NotethatIntervalIndexforbinsmustbenon-overlapping.rightbool,defaultTrueIndicateswhetherbinsincludestherightmostedgeornot.Ifright==True(thedefault),thenthebins[1,2,3,4]indicate(1,2],(2,3],(3,4].ThisargumentisignoredwhenbinsisanIntervalIndex.labelsarrayorFalse,defaultNoneSpecifiesthelabelsforthereturnedbins.Mustbethesamelengthastheresultingbins.IfFalse,returnsonlyintegerindicatorsofthebins.Thisaffectsthetypeoftheoutputcontainer(seebelow).ThisargumentisignoredwhenbinsisanIntervalIndex.IfTrue,raisesanerror.Whenordered=False,labelsmustbeprovided.retbinsbool,defaultFalseWhethertoreturnthebinsornot.Usefulwhenbinsisprovidedasascalar.precisionint,default3Theprecisionatwhichtostoreanddisplaythebinslabels.include_lowestbool,defaultFalseWhetherthefirstintervalshouldbeleft-inclusiveornot.duplicates{default‘raise’,‘drop’},optionalIfbinedgesarenotunique,raiseValueErrorordropnon-uniques.orderedbool,defaultTrueWhetherthelabelsareorderedornot.AppliestoreturnedtypesCategoricalandSeries(withCategoricaldtype).IfTrue,theresultingcategoricalwillbeordered.IfFalse,theresultingcategoricalwillbeunordered(labelsmustbeprovided).ReturnsutCategorical,Series,orndarrayAnarray-likeobjectrepresentingtherespectivebinforeachvalueofx.Thetypedependsonthevalueoflabels.None(default):returnsaSeriesforSeriesxoraCategoricalforallotherinputs.ThevaluesstoredwithinareIntervaldtype.sequenceofscalars:returnsaSeriesforSeriesxoraCategoricalforallotherinputs.Thevaluesstoredwithinarewhateverthetypeinthesequenceis.False:returnsanndarrayofintegers.binsnumpy.ndarrayorIntervalIndex.Thecomputedorspecifiedbins.Onlyreturnedwhenretbins=True.Forscalarorsequencebins,thisisanndarraywiththecomputedbins.Ifsetduplicates=drop,binswilldropnon-uniquebin.ForanIntervalIndexbins,thisisequaltobins.45-2、参数45-2-1、x(必须):输入的数组或序列,包含要分组的连续数据。45-2-2、bins(必须):区间边界的数组或序列,如果bins是一个整数,函数会自动生成从x.min()到x.max()的等宽区间,区间数量为bins(注意,这会导致bins-1个区间);如果bins是一个序列,它将被解释为区间的边界,并定义每个区间的开放或闭合。45-2-3、right(可选,默认值为True):布尔值,如果为True,则区间是右闭的(即每个区间包括右端点);如果为False,则区间是左闭的(即每个区间包括左端点)。45-2-4、labels(可选,默认值为None):用于标记输出类别的数组或序列,如果给定,它必须与生成的区间数量相同;如果未提供,则使用默认标签,如[(0,1],(1,2],...。45-2-5、retbins(可选,默认值为False):布尔值,如果为True,则返回区间边界数组和分类数组。45-2-6、precision(可选,默认值为3):整数,用于设置返回区间标签的浮点数精度。只有当bins是整数且labels未指定时,此参数才有效。45-2-7、include_lowest(可选,默认值为False):布尔值,如果为True,则第一个区间将包括其左边界,这对于不均匀的bins或当bins的第一个值大于x的最小值时特别有用。45-2-8、duplicates(可选,默认值为'raise'):{'raise','drop'},如果bins包含重复值,则:45-2-8-1、'raise':引发ValueError。45-2-8-2、'drop':删除重复值,但仅保留第一个出现的值。45-2-9、ordered(可选,默认值为True):布尔值,如果为True,则返回的Categorical对象是有序的,这对于后续的数据分析(如排序)很重要。45-3、功能        将连续的数值型数据按照指定的区间(或称为“桶”)进行分割,从而将连续的数值变量转换为离散的类别变量,这在数据分析和机器学习的特征工程中尤其有用,因为它可以帮助揭示不同区间内的数据分布特征,或者简化模型的输入。45-4、返回值45-4-1、当不设置retbins=True时,pandas.cut函数返回一个Categorical对象,该对象包含了输入数据 x 中每个值所属的区间标签,Categorical对象是一种特殊的pandas数据类型,用于表示固定数量的类别,且这些类别是有序的(如果ordered=True)。45-4-2、当设置retbins=True时,pandas.cut函数除了返回上述的Categorical对象外,还会额外返回一个数组,该数组包含了用于划分区间的边界值,这允许用户同时获取区间标签和区间边界,便于后续的数据处理和分析。45-5、说明    无45-6、用法45-6-1、数据准备无45-6-2、代码示例#45、pandas.cut函数importpandasaspd#创建一个示例数据集data={'Age':[22,25,45,33,50,41,23,37,29,31,35,48,52,44,27]}df=pd.DataFrame(data)print("原始数据集:")print(df)#定义区间bins=[20,30,40,50,60]#使用cut函数将年龄分割成不同的区间df['AgeGroup']=pd.cut(x=df['Age'],bins=bins,right=True,labels=['20-30','30-40','40-50','50-60'],retbins=False,precision=0,include_lowest=True,duplicates='raise',ordered=True)print("\n分割后的数据集:")print(df)45-6-3、结果输出 #45、pandas.cut函数#原始数据集:#Age#022#125#245#333#450#541#623#737#829#931#1035#1148#1252#1344#1427#分割后的数据集:#AgeAgeGroup#02220-30#12520-30#24540-50#33330-40#45040-50#54140-50#62320-30#73730-40#82920-30#93130-40#103530-40#114840-50#125250-60#134440-50#142720-3046、pandas.qcut函数46-1、语法#46、pandas.qcut函数pandas.qcut(x,q,labels=None,retbins=False,precision=3,duplicates='raise')Quantile-baseddiscretizationfunction.Discretizevariableintoequal-sizedbucketsbasedonrankorbasedonsamplequantiles.Forexample1000valuesfor10quantileswouldproduceaCategoricalobjectindicatingquantilemembershipforeachdatapoint.Parameters:x1dndarrayorSeriesqintorlist-likeoffloatNumberofquantiles.10fordeciles,4forquartiles,etc.Alternatelyarrayofquantiles,e.g.[0,.25,.5,.75,1.]forquartiles.labelsarrayorFalse,defaultNoneUsedaslabelsfortheresultingbins.Mustbeofthesamelengthastheresultingbins.IfFalse,returnonlyintegerindicatorsofthebins.IfTrue,raisesanerror.retbinsbool,optionalWhethertoreturnthe(bins,labels)ornot.Canbeusefulifbinsisgivenasascalar.precisionint,optionalTheprecisionatwhichtostoreanddisplaythebinslabels.duplicates{default‘raise’,‘drop’},optionalIfbinedgesarenotunique,raiseValueErrorordropnon-uniques.ReturnsutCategoricalorSeriesorarrayofintegersiflabelsisFalseThereturntype(CategoricalorSeries)dependsontheinput:aSeriesoftypecategoryifinputisaSerieselseCategorical.Binsarerepresentedascategorieswhencategoricaldataisreturned.binsndarrayoffloatsReturnedonlyifretbinsisTrue.NotesOutofboundsvalueswillbeNAintheresultingCategoricalobject46-2、参数46-2-1、x(必须):要分箱(或分桶)的一维数组或类似数组的对象。46-2-2、q(必须):int或array-likeofquantiles,如果是一个整数,它表示要分成的箱(或桶)的数量;如果是一个数组,则必须包含从0到1的浮点数,表示分位数。例如[0,0.25,0.5,0.75,1.]会将数据分成四个等宽的区间(或尽量等宽)。46-2-3、labels(可选,默认值为None):用于指定每个箱(或桶)的标签,如果为None(默认值),则会自动生成标签(通常是基于整数索引的);如果为False,则不返回标签;如果提供了数组,其长度必须与生成的箱数相同。46-2-4、retbins(可选,默认值为False):如果为True,则返回用于分箱的边界数组(即每个箱的最小值和下一个箱的最小值之间的值,除了最后一个箱,其边界是无穷大)。46-2-5、precision(可选,默认值为3):控制内部计算的精度,更高的精度可以减少由浮点数舍入引起的误差,但可能会增加计算时间。46-2-6、duplicates(可选,默认值为'raise'):如果q参数中有重复的分位数,并且duplicates='raise'(默认值),则会抛出错误;如果duplicates='drop',则忽略重复的分位数。46-3、功能        用于将连续数据根据分位数划分成等频(或近似等频)区间的重要工具,其功能和返回值可以归纳如下:46-3-1、等频分箱:pandas.qcut函数基于数据的分位数进行分箱,确保每个箱(或桶)中的样本数量大致相等(在可能的情况下),这对于需要平衡各个类别中样本数量的场景特别有用。46-3-2、自定义分位数:除了将数据等频分箱外,用户还可以通过指定q参数中的分位数数组来自定义分箱方式,从而实现更精细的数据划分。46-3-3、数据离散化:在数据预处理和特征工程中,pandas.qcut函数常用于将连续变量离散化,以便进行后续的分析、建模或可视化。46-4、返回值46-4-1、如果retbins=False(默认值),则返回两个对象:46-4-1-1、bins:一个与x形状相同的分类数组(Categoricaldtype),表示每个元素所属的箱(或桶)。46-4-1-2、labels(如果指定了):一个数组,包含每个箱(或桶)的标签。46-4-2、如果retbins=True,则返回三个对象:46-4-2-1、bins :与x形状相同的分类数组。46-4-2-2、labels(如果指定了):一个数组,包含每个箱(或桶)的标签。46-4-2-3、bin_edges:一个数组,表示箱(或桶)的边界。46-5、说明    无46-6、用法46-6-1、数据准备无46-6-2、代码示例#46、pandas.qcut函数importpandasaspd#创建一个示例数据集data={'Age':[22,25,45,33,50,41,23,37,29,31,35,48,52,44,27]}df=pd.DataFrame(data)print("原始数据集:")print(df)#使用qcut函数将年龄按分位数分割成四个区间df['AgeGroup']=pd.qcut(x=df['Age'],q=4,labels=['Q1','Q2','Q3','Q4'],retbins=False,precision=3,duplicates='raise')print("\n按分位数分割后的数据集:")print(df)46-6-3、结果输出#46、pandas.qcut函数#原始数据集:#Age#022#125#245#333#450#541#623#737#829#931#1035#1148#1252#1344#1427#按分位数分割后的数据集:#AgeAgeGroup#022Q1#125Q1#245Q4#333Q2#450Q4#541Q3#623Q1#737Q3#829Q2#931Q2#1035Q2#1148Q4#1252Q4#1344Q3#1427Q1二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 12:43 , Processed in 2.190234 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表