|
目录一、用法精讲466、pandas.DataFrame.eq方法466-1、语法466-2、参数466-3、功能466-4、返回值466-5、说明466-6、用法466-6-1、数据准备466-6-2、代码示例466-6-3、结果输出467、pandas.DataFrame.combine方法467-1、语法467-2、参数467-3、功能467-4、返回值467-5、说明467-6、用法467-6-1、数据准备467-6-2、代码示例467-6-3、结果输出468、pandas.DataFrame.combine_first方法468-1、语法468-2、参数468-3、功能468-4、返回值468-5、说明468-6、用法468-6-1、数据准备468-6-2、代码示例468-6-3、结果输出469、pandas.DataFrame.apply方法469-1、语法469-2、参数469-3、功能469-4、返回值469-5、说明469-6、用法469-6-1、数据准备469-6-2、代码示例469-6-3、结果输出470、pandas.DataFrame.applymap方法470-1、语法470-2、参数470-3、功能470-4、返回值470-5、说明470-6、用法470-6-1、数据准备470-6-2、代码示例470-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲466、pandas.DataFrame.eq方法466-1、语法#466、pandas.DataFrame.eq方法pandas.DataFrame.eq(other,axis='columns',level=None)GetEqualtoofdataframeandother,element-wise(binaryoperatoreq).Amongflexiblewrappers(eq,ne,le,lt,ge,gt)tocomparisonoperators.Equivalentto==,!=,=,>withsupporttochooseaxis(rowsorcolumns)andlevelforcomparison.Parameterstherscalar,sequence,Series,orDataFrameAnysingleormultipleelementdatastructure,orlist-likeobject.axis{0or‘index’,1or‘columns’},default‘columns’Whethertocomparebytheindex(0or‘index’)orcolumns(1or‘columns’).levelintorlabelBroadcastacrossalevel,matchingIndexvaluesonthepassedMultiIndexlevel.ReturnsataFrameofboolResultofthecomparison.466-2、参数466-2-1、other(必须):标量、Series、DataFrame或array-like对象,与DataFrame进行比较的对象,如果other是标量,则DataFrame中的每个元素都会与该标量进行比较;如果是另一个DataFrame或Series,则逐元素进行比较。466-2-2、axis(可选,默认值为'columns'):{0,1,'index','columns'},确定运算的轴,如果设为0或'index',则对行标签进行对齐操作;如果设为1或'columns',则对列标签进行对齐操作,通常只有在other是DataFrame或Series时才需要指定axis参数。466-2-3、level(可选,默认值为None):用于在多层索引(MultiIndex)中匹配特定级别,如果DataFrame或other有MultiIndex,level指定要在MultiIndex的哪个级别进行对齐。466-3、功能 对DataFrame中的每个元素与另一个对象(如标量、Series、DataFrame等)进行逐元素比较,判断其是否等于该对象,该方法常用于检查两个数据集之间的相似性或验证数据的一致性。466-4、返回值 返回一个布尔类型的DataFrame,其中每个元素表示原始DataFrame中对应元素是否等于other中的对应元素。即,如果df[i,j]==other[i,j],则结果DataFrame的该元素为True,否则为False。466-5、说明 无466-6、用法466-6-1、数据准备无466-6-2、代码示例#466、pandas.DataFrame.eq方法importpandasaspd#创建示例DataFramedf=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})#比较DataFrame中的元素是否等于标量4result=df.eq(4)print(result)466-6-3、结果输出#466、pandas.DataFrame.eq方法#AB#0FalseTrue#1FalseFalse#2FalseFalse467、pandas.DataFrame.combine方法467-1、语法#467、pandas.DataFrame.combine方法pandas.DataFrame.combine(other,func,fill_value=None,overwrite=True)Performcolumn-wisecombinewithanotherDataFrame.CombinesaDataFramewithotherDataFrameusingfunctoelement-wisecombinecolumns.TherowandcolumnindexesoftheresultingDataFramewillbetheunionofthetwo.ParameterstherDataFrameTheDataFrametomergecolumn-wise.funcfunctionFunctionthattakestwoseriesasinputsandreturnaSeriesorascalar.Usedtomergethetwodataframescolumnbycolumns.fill_valuescalarvalue,defaultNoneThevaluetofillNaNswithpriortopassinganycolumntothemergefunc.overwritebool,defaultTrueIfTrue,columnsinselfthatdonotexistinotherwillbeoverwrittenwithNaNs.ReturnsataFrameCombinationoftheprovidedDataFrames.467-2、参数467-2-1、other(必须):要与当前DataFrame组合的另一个DataFrame,两个DataFrame的索引和列会相互对齐。467-2-2、func(必须):用于组合两个DataFrame中元素的函数,该函数必须接受两个参数,并返回一个值,该函数将应用于两个DataFrame中的每对元素。467-2-3、fill_value(可选,默认值为None):标量值,在操作中用于填充缺失值的填充值,如果其中一个DataFrame中某个位置存在NaN或缺失值,而另一个DataFrame中相应位置有值,则使用fill_value进行替代。467-2-4、overwrite(可选,默认值为True):布尔值,如果为True,则当self和other中对应元素是缺失值时,后者的值会覆盖前者的值;如果为False,则保持第一个DataFrame中的缺失值,除非使用fill_value进行替代。467-3、功能 用于逐元素地将两个DataFrame组合在一起,通过指定一个函数func,定义如何组合数据。此方法可以用于两个DataFrame之间进行灵活的元素级操作,例如选择最大值、最小值或其他自定义的组合方式。467-4、返回值 返回一个新的DataFrame,其中每个元素由func函数在self和other的对应元素上进行计算得到,索引和列名与输入的两个DataFrame对齐。467-5、说明 无467-6、用法467-6-1、数据准备无467-6-2、代码示例#467、pandas.DataFrame.combine方法importpandasaspdimportnumpyasnp#创建两个示例DataFramedf1=pd.DataFrame({'A':[1,2,np.nan],'B':[4,np.nan,6]})df2=pd.DataFrame({'A':[3,4,5],'B':[np.nan,2,1]})#定义一个组合函数,选择两个DataFrame中的最大值defcomb_func(x,y):returnnp.maximum(x,y)#使用combine进行组合result=df1.combine(df2,comb_func,fill_value=0)print(result)467-6-3、结果输出#467、pandas.DataFrame.combine方法#AB#03.04.0#14.02.0#25.06.0468、pandas.DataFrame.combine_first方法468-1、语法#468、pandas.DataFrame.combine_first方法pandas.DataFrame.combine_first(other)Updatenullelementswithvalueinthesamelocationinother.CombinetwoDataFrameobjectsbyfillingnullvaluesinoneDataFramewithnon-nullvaluesfromotherDataFrame.TherowandcolumnindexesoftheresultingDataFramewillbetheunionofthetwo.Theresultingdataframecontainsthe‘first’dataframevaluesandoverridesthesecondonevalueswherebothfirst.loc[index,col]andsecond.loc[index,col]arenotmissingvalues,uponcallingfirst.combine_first(second).ParameterstherDataFrameProvidedDataFrametousetofillnullvalues.ReturnsataFrameTheresultofcombiningtheprovidedDataFramewiththeotherobject.468-2、参数468-2-1、other(必须):与当前DataFrame进行组合的另一个DataFrame,两个DataFrame按照索引和列进行对齐。468-3、功能 用于将两个DataFrame逐元素进行比较,并优先选择第一个DataFrame中的非空值,如果第一个DataFrame中的值是缺失值(NaN),则使用第二个DataFrame中的相应值进行填充。468-4、返回值 返回一个新DataFrame,其中每个元素优先选择第一个DataFrame中的非空值,如果第一个DataFrame中的值是NaN,则用第二个DataFrame中的相应值进行替代。468-5、说明 无468-6、用法468-6-1、数据准备无468-6-2、代码示例#468、pandas.DataFrame.combine_first方法importpandasaspdimportnumpyasnp#创建两个示例DataFramedf1=pd.DataFrame({'A':[1,np.nan,3],'B':[4,np.nan,6]})df2=pd.DataFrame({'A':[np.nan,2,5],'B':[7,8,np.nan]})#使用combine_first进行组合result=df1.combine_first(df2)print(result)468-6-3、结果输出#468、pandas.DataFrame.combine_first方法#AB#01.04.0#12.08.0#23.06.0469、pandas.DataFrame.apply方法469-1、语法#469、pandas.DataFrame.apply方法pandas.DataFrame.apply(func,axis=0,raw=False,result_type=None,args=(),by_row='compat',engine='python',engine_kwargs=None,**kwargs)ApplyafunctionalonganaxisoftheDataFrame.ObjectspassedtothefunctionareSeriesobjectswhoseindexiseithertheDataFrame’sindex(axis=0)ortheDataFrame’scolumns(axis=1).Bydefault(result_type=None),thefinalreturntypeisinferredfromthereturntypeoftheappliedfunction.Otherwise,itdependsontheresult_typeargument.Parameters:funcfunctionFunctiontoapplytoeachcolumnorrow.axis{0or‘index’,1or‘columns’},default0Axisalongwhichthefunctionisapplied:0or‘index’:applyfunctiontoeachcolumn.1or‘columns’:applyfunctiontoeachrow.rawbool,defaultFalseDeterminesifroworcolumnispassedasaSeriesorndarrayobject:False:passeseachroworcolumnasaSeriestothefunction.True:thepassedfunctionwillreceivendarrayobjectsinstead.IfyouarejustapplyingaNumPyreductionfunctionthiswillachievemuchbetterperformance.result_type{‘expand’,‘reduce’,‘broadcast’,None},defaultNoneTheseonlyactwhenaxis=1(columns):‘expand’:list-likeresultswillbeturnedintocolumns.‘reduce’:returnsaSeriesifpossibleratherthanexpandinglist-likeresults.Thisistheoppositeof‘expand’.‘broadcast’:resultswillbebroadcasttotheoriginalshapeoftheDataFrame,theoriginalindexandcolumnswillberetained.Thedefaultbehaviour(None)dependsonthereturnvalueoftheappliedfunction:list-likeresultswillbereturnedasaSeriesofthose.HoweveriftheapplyfunctionreturnsaSeriestheseareexpandedtocolumns.argstuplePositionalargumentstopasstofuncinadditiontothearray/series.by_rowFalseor“compat”,default“compat”Onlyhasaneffectwhenfuncisalistlikeordictlikeoffuncsandthefuncisn’tastring.If“compat”,willifpossiblefirsttranslatethefuncintopandasmethods(e.g.Series().apply(np.sum)willbetranslatedtoSeries().sum()).Ifthatdoesn’twork,willtrycalltoapplyagainwithby_row=Trueandifthatfails,willcallapplyagainwithby_row=False(backwardcompatible).IfFalse,thefuncswillbepassedthewholeSeriesatonce.Newinversion2.1.0.engine{‘python’,‘numba’},default‘python’Choosebetweenthepython(default)engineorthenumbaengineinapply.ThenumbaenginewillattempttoJITcompilethepassedfunction,whichmayresultinspeedupsforlargeDataFrames.Italsosupportsthefollowingengine_kwargs:nopython(compilethefunctioninnopythonmode)nogil(releasetheGILinsidetheJITcompiledfunction)parallel(trytoapplythefunctioninparallelovertheDataFrame)Noteuetolimitationswithinnumba/howpandasinterfaceswithnumba,youshouldonlyusethisifraw=TrueNote:ThenumbacompileronlysupportsasubsetofvalidPython/numpyoperations.Pleasereadmoreaboutthesupportedpythonfeaturesandsupportednumpyfeaturesinnumbatolearnwhatyoucanorcannotuseinthepassedfunction.Newinversion2.2.0.engine_kwargsdictPasskeywordargumentstotheengine.Thisiscurrentlyonlyusedbythenumbaengine,seethedocumentationfortheengineargumentformoreinformation.**kwargsAdditionalkeywordargumentstopassaskeywordsargumentstofunc.Returns:SeriesorDataFrameResultofapplyingfuncalongthegivenaxisoftheDataFrame.469-2、参数469-2-1、func(必须):要应用于DataFrame的函数,可以是一个用户定义的函数或numpy的ufunc(通用函数)。469-2-2、axis(可选,默认值为0):{0或'index',1或'columns'},确定函数应用方向,如果axis=0或'index',函数应用于每一列;如果axis=1或'columns',函数应用于每一行。469-2-3、raw(可选,默认值为False):布尔值,如果为True,传递给函数的将是ndarray对象而不是Series对象,可能会提高性能。469-2-4、result_type(可选,默认值为None):{‘expand’,‘reduce’,‘broadcast’,None},确定结果的形状:expand:结果将被扩展成一个DataFrame。reduce:尝试减少结果的维度,例如从DataFrame到Series。broadcast:保持与输入相同的形状,将结果广播回原始DataFrame。469-2-5、args(可选,默认值为()):元组,传递给func的其他位置参数。469-2-6、by_row(可选,默认值为'compat'):字符串,适用于DataFrame子类的兼容性参数,目前在Pandas中并未广泛使用。469-2-7、engine(可选,默认值为'python'):{‘cython’,‘numba’,'python'},指定计算引擎,'cython'和'numba'可以用于加速计算;'python'使用默认的Python计算。469-2-8、engine_kwargs(可选,默认值为None):字典,传递给指定计算引擎的其他关键字参数。469-2-9、**kwargs(可选):传递给func的其他关键字参数。469-3、功能 将给定的函数应用于DataFrame的行或列上,可以按照行或列进行迭代,并对每一行或列应用指定的函数,该方法非常适合数据转换和清洗工作。469-4、返回值 取决于func的返回值和axis参数,如果func应用于列(axis=0),返回值将是一个Series对象;如果应用于行(axis=1),返回值可能是一个DataFrame或Series对象。469-5、说明 使用场景:469-5-1、数据转换和清洗:在数据科学和机器学习项目中,经常需要对数据进行转换或清洗,例如处理缺失值、标准化数据或改变数据格式,该方法可以方便地对每一行或每一列应用相同的转换函数。469-5-2、特征工程:在构建机器学习模型时,特征工程是一个关键步骤,该方法可以用于生成新的特征或转换现有的特征。469-5-3、数据聚合和汇总:在需要对数据进行聚合操作时,该方法可以用于对每一行或每一列的值进行计算。469-5-4、条件逻辑操作:可以根据条件对数据进行过滤或转换操作。469-5-5、复杂计算:在一些复杂的场景下,直接使用内置函数可能不够灵活或高效,此时可以使用该方法编写更为复杂的计算逻辑。469-5-6、合并和连接操作:当需要在DataFrame内部进行多列的合并操作时,该方法也是一个常用工具。469-6、用法469-6-1、数据准备无469-6-2、代码示例#469、pandas.DataFrame.apply方法#469-1、数据转换和清洗importpandasaspdimportnumpyasnpdata={'A':[1,2,np.nan,4],'B':[5,np.nan,np.nan,8],'C':[9,10,11,12]}df=pd.DataFrame(data)print("OriginalDataFrame:")print(df)#填充列中缺失值为列的均值df=df.apply(lambdax:x.fillna(x.mean()),axis=0)print("\nDataFrameafterfillingmissingvalueswithmean:")print(df)#469-2、特征工程importpandasaspddata={'text':['Pythonisgreat','Pandasmakesthingseasy','Machinelearningisfun']}df=pd.DataFrame(data)defextract_keywords(text):#简单的关键词提取函数,实际使用可以考虑更复杂的方法returntext.split()df['keywords']=df['text'].apply(extract_keywords)print("\nDataFramewithextractedkeywords:")print(df)data={'date':pd.to_datetime(['2021-01-01','2022-05-03','2023-07-19'])}df=pd.DataFrame(data)df['year']=df['date'].apply(lambdax:x.year)df['month']=df['date'].apply(lambdax:x.month)df['day']=df['date'].apply(lambdax:x.day)print("\nDataFramewithextractedyear,month,andday:")print(df)#469-3、数据聚合和汇总importpandasaspddata={'price':[100,250,150],'quantity':[1,2,3]}df=pd.DataFrame(data)df['total_spent']=df.apply(lambdax:x['price']*x['quantity'],axis=1)print("\nDataFramewithtotalspent:")print(df)#469-4、条件逻辑操作importpandasaspddata={'price':[70,150,90]}df=pd.DataFrame(data)df['high_value']=df.apply(lambdax:'Yes'ifx['price']>100else'No',axis=1)print("\nDataFramewithhigh_valuecolumnbasedonprice:")print(df)#469-5、复杂计算importpandasaspddata={'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}df=pd.DataFrame(data)defcustom_metric(row):return(row['A']*2+row['B']**2)/row['C']df['metric']=df.apply(custom_metric,axis=1)print("\nDataFramewithcustommetric:")print(df)#469-6、合并和连接操作importpandasaspddata={'first_name':['John','Jane','Jim'],'last_name':['Doe','Doe','Beam']}df=pd.DataFrame(data)df['full_name']=df.apply(lambdax:x['first_name']+''+x['last_name'],axis=1)print("\nDataFramewithfull_name:")print(df)469-6-3、结果输出#469、pandas.DataFrame.apply方法#469-1、数据转换和清洗#OriginalDataFrame:#ABC#01.05.09#12.0NaN10#2NaNNaN11#34.08.012##DataFrameafterfillingmissingvalueswithmean:#ABC#01.0000005.09#12.0000006.510#22.3333336.511#34.0000008.012#469-2、特征工程#DataFramewithextractedkeywords:#textkeywords#0Pythonisgreat[Python,is,great]#1Pandasmakesthingseasy[Pandas,makes,things,easy]#2Machinelearningisfun[Machine,learning,is,fun]##DataFramewithextractedyear,month,andday:#dateyearmonthday#02021-01-01202111#12022-05-03202253#22023-07-192023719#469-3、数据聚合和汇总#DataFramewithtotalspent:#pricequantitytotal_spent#01001100#12502500#21503450#469-4、条件逻辑操作#DataFramewithhigh_valuecolumnbasedonprice:#pricehigh_value#070No#1150Yes#290No#469-5、复杂计算#DataFramewithcustommetric:#ABCmetric#01472.571429#12583.625000#23694.666667#469-6、合并和连接操作#DataFramewithfull_name:#first_namelast_namefull_name#0JohnDoeJohnDoe#1JaneDoeJaneDoe#2JimBeamJimBeam470、pandas.DataFrame.applymap方法470-1、语法#470、pandas.DataFrame.applymap方法pandas.DataFrame.applymap(func,na_action=None,**kwargs)ApplyafunctiontoaDataframeelementwise.Deprecatedsinceversion2.1.0ataFrame.applymaphasbeendeprecated.UseDataFrame.mapinstead.ThismethodappliesafunctionthatacceptsandreturnsascalartoeveryelementofaDataFrame.Parameters:funccallablePythonfunction,returnsasinglevaluefromasinglevalue.na_action{None,‘ignore’},defaultNoneIf‘ignore’,propagateNaNvalues,withoutpassingthemtofunc.**kwargsAdditionalkeywordargumentstopassaskeywordsargumentstofunc.ReturnsataFrameTransformedDataFrame.470-2、参数470-2-1、func(必须):对DataFrame中的每一个元素应用的函数。470-2-2、na_action(可选,默认值为None):指定如何处理NaN(缺失值),默认值None表示NaN也会被传递到函数func中进行处理;'ignore'表示忽略NaN值,不对它们进行任何处理,即这些值将保持为NaN。470-2-3、**kwargs(可选):传递给映射函数的其他参数。470-3、功能 将指定的函数应用于DataFrame中的每一个元素,它是逐元素操作的,因此适用于需要对DataFrame中每个元素进行相同处理的场景。470-4、返回值 返回一个新的DataFrame,其结构(行和列的标签)与原始DataFrame相同,但每个元素都经过了传入函数的处理。470-5、说明 使用场景:470-5-1、数据清洗和预处理470-5-1-1、批量转换数据格式:当你需要将DataFrame中的所有数据元素转换为某种格式(如将所有字符串转为小写,或将所有数字转为特定的单位)时,applymap是一个理想的选择。470-5-1-2、数据修复:例如,将DataFrame中的所有None或空字符串转换为NaN,或者将数据中的特定字符(如$)去除。470-5-2、特征工程470-5-2-1、统一特征处理:在机器学习的特征工程中,常常需要对整个数据集的每个元素进行相同的转换操作,比如对每个元素进行标准化、归一化或取对数等操作。470-5-2-2、特征衍生:可以使用applymap在数据的每个元素上执行数学运算或逻辑操作,从而生成新的特征。470-5-3、字符串操作470-5-3-1、批量处理字符串:如果DataFrame中的每个元素都是字符串,可以使用applymap来执行各种操作,如去除空格、替换字符、格式转换等。470-5-4、数值计算470-5-4-1、数学变换:如果需要对数据中的每个数值元素进行同样的数学变换,比如乘法、指数计算、对数计算等,applymap可以帮助你快速实现。470-5-4-2、异常值处理:可以使用applymap识别和处理异常值,比如将所有超过某个阈值的元素替换为NaN或其他值。470-5-5、条件逻辑470-5-5-1、条件转换:你可以使用applymap根据某些条件对DataFrame中的每个元素进行转换,比如将所有负数替换为0,或者根据某些条件将元素分组。470-5-6、数据格式化470-5-6-1、输出格式调整:当需要对DataFrame中的数值进行格式化,比如将所有数值显示为两位小数,或者将布尔值转换为字符串"True"/"False"时,applymap能够有效实现这一点。470-5-7、数据可视化前的准备470-5-7-1、格式调整:在将DataFrame数据用于可视化之前,可能需要对数据进行格式化或转换,使其更易于解读或符合图表的要求,这时applymap也非常有用。470-6、用法470-6-1、数据准备无470-6-2、代码示例#470、pandas.DataFrame.applymap方法#470-1、数据清洗和预处理#470-1-1、批量转换数据格式importpandasaspddf=pd.DataFrame({'Name':['Myelsa','Bryce','Jimmy'],'City':['NewYork','LosAngeles','Chicago']})#将所有字符串转换为小写df=df.applymap(lambdax:x.lower()ifisinstance(x,str)elsex)print(df)#470-1-2、数据修复importpandasaspdimportnumpyasnpdf=pd.DataFrame({'A':[1,None,3],'B':['x',None,'z']})#将None替换为NaNdf=df.applymap(lambdax:np.nanifxisNoneelsex)print(df)#470-2、特征工程importpandasaspdimportnumpyasnpdf=pd.DataFrame({'Feature1':[1,10,100],'Feature2':[0.5,5,50]})#对每个元素取对数df=df.applymap(lambdax:np.log(x))print(df)#470-3、字符串操作importpandasaspddf=pd.DataFrame({'A':['hello','world','pandas'],'B':['data','science','rocks!']})#去除字符串两边的空格df=df.applymap(lambdax:x.strip()ifisinstance(x,str)elsex)print(df)#470-4、数值计算importpandasaspddf=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})#每个元素乘以10df=df.applymap(lambdax:x*10)print(df)#470-5、条件逻辑importpandasaspddf=pd.DataFrame({'A':[1,-2,3],'B':[-4,5,-6]})#将负数替换为0df=df.applymap(lambdax:0ifx
|
|