版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Pandas-数据处理三剑客课前回顾直接筛选:使用[],选择单列、多列、连续多行(切片);条件筛选:按条件筛选(单列/多列),可以使用操作符&,不能使用关键字;索引器筛选:先行后列,可选择单行、多行、行列组合,也可按条件选择;loc:使用自定义索引,切片为闭区间,没有自定义索引时可使用原始索引;iloc:只能使用原始索引,切片前闭后开。数据处理三剑客在数据处理时,经常需要针对DataFrame进行逐行、逐列、逐元素的操作,如下表:要求计算净利率并进行业绩评价,净利率超过20%标记为业绩达标,否则标记为不达标,该如何实现呢?方法一:通过循环语句逐个取出净利率进行条件判断。数据处理三剑客代码importpandasaspddf=pd.read_excel('/webpython/course/d2633ec9ca5c4a288b73f97b4616d541/data.xlsx',sheet_name=1,converters={'年':str,'月':str})df['净利率']=df['净利润']/df['营业收入']#循环取出指标判断foriindf.index:df.loc[i,'业绩评价']='达标'ifdf.loc[i,'净利率']>0.2else'不达标'show_table(df.head())通过for循环及loc索引器取出指标进行判断数据处理三剑客循环语句确实可以解决问题,但需要定义可执行循环的序列,那么,有没有什么方法能够简单实现逐行逐列的操作呢?Pandas提供了map()、apply()、applymap()函数处理此类问题:map()函数:用于Series元素,同python内置map函数;apply()函数:用于Series或DataFrame的行列;applymap()函数:用于DataFrame中每个元素。注意以上三个函数均可调用其他函数作为参数,可以直接针对DataFrame行、列、元素进行复杂处理,是数据分析处理中特别实用的方法。目录010203map()函数apply()函数applymap()函数01map()函数
map()函数map()函数:用于Series,与Python内置的map函数一样,根据提供的函数对指定序列逐一做映射,可以接受一个函数或含有映射关系的字典型对象。map()函数语法:Series.map(functionordict,na_action=None)map()函数参数:functionordict:可接收lambda表达式、自定义函数(def)、Python内置函数、字典;na_action:默认na_action=None,表示将函数应用于缺失值,na_action='ignore'表示忽略缺失值,即函数不应用于缺失值(并将其保留为NaN)。Series.map(function)要求:根据净利率进行业绩评价,使用map()函数将净利率超过20%的月份标记为达标,否则不达标。示例1代码df['业绩评价']=df['净利率'].map(lambdax:'达标'ifx>0.2else'不达标')show_table(df.head())使用map函数仅需一行代码Series.map(function)原理将每个元素逐一传入lambda函数得到返回值逐元素操作map(lambdax:'达标'ifx>0.2else'不达标')Series.map(dict)要求:根据业绩评价结果确定是否发放奖金,业绩达标则发放,否则不发放。示例2代码df['是否发放奖金']=df['业绩评价'].map({'达标':'发放','不达标':'不发放'})show_table(df.head())利用字典型参数进行映射Series.map(dict)原理将每个元素逐一传入字典得到返回值逐元素操作{'达标':'发放','不达标':'不发放'}02apply()函数apply()函数apply()函数:可作用于Series或者DataFrame,功能是遍历整个Series或DataFrame,对每个元素运行指定的函数。Series.apply()函数:在Series值上调用函数,与Series.map()类似,区别在于apply能够传入功能更复杂的函数。Series.apply()函数语法:Series.apply(function,args)args参数:接收元组,单个元素需加逗号,(x,)Series.apply()函数针对Series的一般操作,map()函数均能完成,当自定义函数需要增加参数时,可以使用Series.apply(),如:需要调整营业收入金额,而具体调整的金额未知,可自定义函数,在调用apply函数时,将具体调整的金额传入args参数。代码#自定义函数deff(x,y):returnx+y#复制dfdf1=df.copy()#每月营业收入调增1000df1['营业收入']=df1['营业收入'].apply(f,args=(1000,))show_table(df1.iloc[:,:3].head())DataFrame.apply()函数DataFrame.apply()函数:传递给参数function的对象是Series。DataFrame.apply()函数语法:DataFrame.apply(function,args,axis=0)axis参数:默认0或“index”,表示沿0轴操作,即将函数应用于每一列;1或“columns”,表示沿1轴操作,即将函数应用于每一行。提示对于DataFrame而言,apply()函数是非常重要的数据处理方法,可接收各种函数,处理方式灵活。DataFrame.apply(axis=0)要求:使用apply函数将营业收入、营业成本、净利润以“万元”为单位展示。代码df2=df[["营业收入","营业成本","净利润"]].apply(lambdax:round(x/10000,2))show_table(df2.head())注意默认axis=0时,会将各列(columns)以Series的形式作为参数,传入到指定的操作方法中,操作后合并返回相应结果。DataFrame.apply(axis=0)原理每一列数据以Series的形式传入匿名函数lambdax:round(x/10000,2)round()函数要求:使用apply函数将营业收入、营业成本、净利润以“万元”为单位展示。代码df2=round(df[["营业收入","营业成本","净利润"]]/10000,2)show_table(df2.head())提示在实际应用中可以直接调用round函数,无须使用apply函数。DataFrame.apply(axis=1)要求:使用apply()函数计算每月奖金额,业绩达标发放奖金的标准为净利润的10%。示例3代码#自定义函数计算奖金:参数x指dataFrame中任一行defcalcBonus(x):ifx['是否发放奖金']=='发放':x['奖金额']=x['净利润']*0.1else:x['奖金额']=0returnx
#调用apply函数计算各月奖金额df=df.apply(calcBonus,axis=1)#使用show_table()函数展示df前5行show_table(df.head())DataFrame.apply(axis=1)要求:使用apply()函数计算每月奖金额,业绩达标发放奖金的标准为净利润的10%。DataFrame.apply(axis=1)原理df结果ifx['是否发放奖金']=='发放':x['奖金额']=x['净利润']*0.1else:
x['奖金额']=0returnx每一行数据以Series的形式传入自定义函数calcBonus()03applymap()函数applymap()函数applymap()函数:对DataFrame中的每个元素执行指定方法(函数或lambda表达式)的操作。语法:DataFrame.applymap(function)要求:将DataFrame中所有元素转换为字符串类型,并在元素前加上“#”。示例4代码#引入pandasimportpandasaspddf=pd.read_excel('/webpython/course/d2633ec9ca5c4a288b73f97b4616d541/data.xlsx',sheet_name=1,converters={'年':str,'月':str})#对每个元素执行指定操作df=df.applymap(lambdax:'#'+str(x))show_table(df.head())applymap()函数要求:将DataFrame
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度国际时尚品牌代理与分销服务合同2篇
- 建筑施工设计分包合同样本
- 燃料供应合同的安全协议解读
- 企业间借款合同范本格式
- 河沙材料采购合同
- 二零二四年度市场推广合同:社交平台推广与粉丝运营协议
- 永州市住宅买卖合同范例
- 轮胎购销合同格式范本范本
- 抗化学腐蚀性能玻璃购销合同
- 树苗购销合同范本格式
- 新概念英语第四册课
- GB/T 6003.1-2012试验筛技术要求和检验第1部分:金属丝编织网试验筛
- GB/T 33417-2016过氧化氢气体灭菌生物指示物检验方法
- GB/T 13459-2008劳动防护服防寒保暖要求
- 公益创投项目申报书
- GA/T 72-2013楼寓对讲电控安全门通用技术条件
- GA 563-2005警服春秋执勤服
- 陶瓷基复合材料要点课件
- 国有企业规范董事会建设问题及建议(五篇材料)
- 曾华 民族传统体育(陀螺)
- 欧盟垃圾焚烧污染物排放标准DIRECTIVE-2000(中文版)
评论
0/150
提交评论