版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Pandas-数据处理三剑客课前回顾直接筛选:使用[],选择单列、多列、连续多行(切片);条件筛选:按条件筛选(单列/多列),可以使用操作符&,不能使用关键字;索引器筛选:先行后列,可选择单行、多行、行列组合,也可按条件选择;loc:使用自定义索引,切片为闭区间,没有自定义索引时可使用原始索引;iloc:只能使用原始索引,切片前闭后开。数据处理三剑客在数据处理时,经常需要针对DataFrame进行逐行、逐列、逐元素的操作,如下表:要求计算净利率并进行业绩评价,净利率超过20%标记为业绩达标,否则标记为不达标,该如何实现呢?方法一:通过循环语句逐个取出净利率进行条件判断。数据处理三剑客代码importpandasaspd#数据准备df=pd.read_excel(r'/app/bigdata/basics/data.xlsx',sheet_name=1,converters={'年':str,'月':str})df['净利率']=df['净利润']/df['营业收入']#循环取出指标判断foriindf.index:df.loc[i,'业绩评价']='达标'ifdf.loc[i,'净利率']>0.2else'不达标'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'不达标')df.head()使用map函数仅需一行代码Series.map(function)原理将每个元素逐一传入lambda函数得到返回值逐元素操作map(lambdax:'达标'ifx>0.2else'不达标')Series.map(dict)要求:根据业绩评价结果确定是否发放奖金,业绩达标则发放,否则不发放。示例2代码df['是否发放奖金']=df['业绩评价'].map({'达标':'发放','不达标':'不发放'})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#每月营业收入调增1000df['营业收入']=df['营业收入'].apply(f,args=(1000,))df.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函数将营业收入、营业成本、净利润以“万元”为单位展示。代码df1=df[["营业收入","营业成本","净利润"]].apply(lambdax:round(x/10000,2))df1.head()注意默认axis=0时,会将各列(columns)以Series的形式作为参数,传入到指定的操作方法中,操作后合并返回相应结果。DataFrame.apply(axis=0)原理每一列数据以Series的形式传入匿名函数lambdax:round(x/10000,2)DataFrame.apply(axis=1)要求:使用apply()函数计算每月奖金额,业绩达标发放奖金的标准为净利润的10%。示例3代码#自定义函数计算奖金:参数x指dataFrame中任一行defcalcBonus(x):ifx['是否发放奖金']=='发放':x['奖金额']=x['净利润']*0.1else:
x['奖金额']=0returnxdf.apply(calcBonus,axis=1).head()DataFrame.apply(axis=1)原理df结果ifx['是否发放奖金']=='发放':x['奖金额']=x['净利润']*0.1else:
x['奖金额']=0returnx每一行数据以Series的形式传入自定义函数calcBonus()03applymap()函数applymap()函数applymap()函数:对DataFrame中的每个元素执行指定方法(函数或lambda表达式)的操作。语法:DataFrame.applymap(function)要求:将DataFrame中所有元素转换为字符串类型,并在元素前加上“#”。示例4代码#对每个元素执行指定操作df.applymap(lambdax:'#'+str(x)).tail()课堂小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商务谈判会议纪要与要点分析
- 小学主题班会课件:勤奋耕耘收获希望敬业奉献成就未来
- 通信公司市场营销专员工作KPI考核表
- 2025年煤炭生产经营单位(安全生产管理人员)模拟考试题及答案
- 抵制网络谣言筑牢安全防线小学高年级班会设计
- 小学主题班会课件:开启智慧与快乐的教育之门
- 电力检修管理制度
- 初级社工证考题及答案
- 医疗废物分类管理试题(附答案)
- 危险化学品储存企业危险源管理制度
- 2026四川广元市川北幼儿师范高等专科学校助学助管员招聘7人(第二批)笔试模拟试题及答案详解
- 2026年中医药法普法竞赛试题及答案
- 2026重庆市城市建设发展有限公司招聘4人参考题库含答案详解【能力提升】
- 2026广西北海市不动产登记中心招聘临聘人员4人笔试参考题库及答案详解
- 2026-2030中国白酒行业市场发展分析及前景趋势与投资研究报告
- 外研版英语八年级下册Unit4语法之宾语从句(教案)
- 2026学年凉山彝族自治州盐源县四年级数学第二学期期末复习检测试题含答案
- 抗磷脂综合征诊疗专家共识(2026版)
- 2025年事业单位资产管理岗招聘笔试题目(附答案)
- 2026年确有专长考核模拟题库有答案详解
- 一例慢性肾衰竭血液透析患者的护理查房
评论
0/150
提交评论