pandas map(),apply(),applymap()区别解析
基础
以下操作基于python3.6windows10环境下通过
将通过实例来演示三者的区别
toward_dict={1:'东',2:'南',3:'西',4:'北'} df=pd.DataFrame({'house':list('AABCEFG'), 'price':[100,90,'',50,120,150,200], 'toward':['1','1','2','3','','3','2']}) df
map()方法
通过df.(tab)键,发现df的属性列表中有apply()和applymap(),但没有map().
map()是python自带的方法,可以对df某列内的元素进行操作,我个人最常用的场景就是有toward_dict的映射关系,为df中的toward匹配出结果,
df['朝向']=df.toward.map(toward_dict);df
因为df.toward这列数字是str型的,toward_dict中的key是int型,下面修正操作下:两个思路:
第一种思路:`toward_dict`的key转换为str型 toward_dict2=dict((str(key),val)forkey,valintoward_dict.items())
#第二种思路,将df.toward转为int型 df.toward=df.toward.map(lambdax:np.nanifx==''elsex).map(int,na_action='ignore') df['朝向2']=df.toward.map(toward_dict);df
apply()方法
更新时间:2018-08-10
我目前的实际工作中使用apply()方法比较少,所以整理的内容比较简陋,后续涉及到数据分析方面可能会应用比较多些.
先将上面的测试中的map替换为apply,看看怎么样?
结果报错了,ValueError,还是老老实实写实际操作例子吧?
参考DataFrame.apply官方文档
文档中第一个参数:
func:function
Functiontoapplytoeachcolumnorrow.
意思即是,将传入的func应用到每一列或每一行,进行元素级别的运算
第二个参数:
axis:{0or‘index',1or‘columns'},default0
Axisalongwhichthefunctionisapplied:
0or‘index':applyfunctiontoeachcolumn.#注意这里的解释
1or‘columns':applyfunctiontoeachrow.
举例:
这个要特别注意的,
没有继续使用map里的DF,是因为df.house是字符串,不能进行np.sum运算,会报错.
2018年12月3日新增:
最近在工作中使用到了pandas.apply()方法,更新如下:
背景介绍:
一个df有三个列需要进行计算,change_type值为1和0,1为涨价,0为降价,price为现价,changed为涨降价的绝对值,现求:涨降价的比例,精确到0位,无小数位,
解决思路:
1.最主要的计算是:涨降价的绝对值/原价
2.最主要的难点是:涨价的原价=现价-绝对值
降价的原价=现价+绝对值
伪代码如下:涨降价比例=round(changed/(price加上或减去changed),0)
就是我需求的结果了.
解决方案如下:
以下代码经过win10环境python3.6版本测试通过
importpandasaspd df=pd.DataFrame({'change_type':[1,1,0,0,1,0], 'price':[100,90,50,120,150,200], 'changed':[10,8,4,11,14,10]}) defget_round(change_type,price,changed_val): """ 策略设计 """ ifchange_type==0: returnround(changed_val/(price+changed_val)*100,2) elifchange_type==1: returnround(changed_val/(price-changed_val)*100,2) else: print(f'{change}isnotexists') #策略实现 df['round']=df.apply(lambdax:get_round(x['change_type'],x['price'],x['changed']),axis=1)
若有问题,欢迎指正,谢谢
applymap()
参考DataFrame.applymap官方文档:
func:callable
Pythonfunction,returnsasinglevaluefromasinglevalue.
文档很简单,只有一个参数,即传入的func方法
样例参考文档吧,没有比这个更简单了
总结:
map()方法是pandas.series.map()方法,对DF中的元素级别的操作,可以对df的某列或某多列,可以参考文档
apply(func)是DF的属性,对DF中的行数据或列数据应用func操作.
applymap(func)也是DF的属性,对整个DF所有元素应用func操作
到此这篇关于pandasmap(),apply(),applymap()区别解析的文章就介绍到这了,更多相关pandasmap(),apply(),applymap()内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。