pandas map(),apply(),applymap()区别解析


Posted in Python onFebruary 24, 2021

基础

以下操作基于python 3.6 windows 10 环境下 通过
将通过实例来演示三者的区别

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

pandas map(),apply(),applymap()区别解析

map()方法

通过df.(tab)键,发现df的属性列表中有apply() 和 applymap(),但没有map().
map()是python 自带的方法, 可以对df某列内的元素进行操作, 我个人最常用的场景就是有toward_dict的映射关系 ,为df中的toward匹配出结果,

df['朝向'] = df.toward.map(toward_dict);df

pandas map(),apply(),applymap()区别解析

结果就是没有匹配出来, why???
因为df.toward这列数字是str型的, toward_dict中的key是int型,下面修正操作下:两个思路:

第一种思路:`toward_dict`的key转换为str型
toward_dict2 = dict((str(key), val) for key, val in toward_dict.items())

pandas map(),apply(),applymap()区别解析

# 第二种思路, 将df.toward转为int型
df.toward = df.toward.map(lambda x: np.nan if x == '' else x).map(int,na_action='ignore')
df['朝向2'] = df.toward.map(toward_dict);df

pandas map(),apply(),applymap()区别解析

apply() 方法

更新时间: 2018-08-10
我目前的实际工作中使用apply()方法比较少, 所以整理的内容比较简陋, 后续涉及到数据分析方面可能会应用比较多些.

先将上面的测试中的map替换为apply,看看怎么样?
结果报错了, ValueError, 还是老老实实写实际操作例子吧 ?
参考DataFrame.apply官方文档
文档中第一个参数:

func : function
Function to apply to each column or row.

意思即是, 将传入的func应用到每一列或每一行,进行元素级别的运算
第二个参数:

axis : {0 or ‘index', 1 or ‘columns'}, default 0
Axis along which the function is applied:
0 or ‘index': apply function to each column. # 注意这里的解释
1 or ‘columns': apply function to each row.

举例:

pandas map(),apply(),applymap()区别解析

这个要特别注意的,
没有继续使用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)
就是我需求的结果了.

解决方案 如下:
以下代码经过win 10 环境 python3.6 版本测试通过

import pandas as pd
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]})

def get_round(change_type, price, changed_val):
	"""
	策略设计
	"""
	if change_type == 0:
		return round(changed_val/(price + changed_val) * 100, 2)
	elif change_type == 1:
		return round(changed_val/(price - changed_val) * 100, 2)
	else:
		print(f'{change} is not exists')

# 策略实现
df['round'] = df.apply(lambda x: get_round(x['change_type'], x['price'], x['changed']),axis=1)

若有问题, 欢迎指正, 谢谢

applymap()

参考DataFrame.applymap官方文档:

func : callable
Python function, returns a single value from a single value.

文档很简单, 只有一个参数, 即传入的func方法
样例参考文档吧, 没有比这个更简单了

总结:

map() 方法是pandas.series.map()方法, 对DF中的元素级别的操作, 可以对df的某列或某多列, 可以参考文档
apply(func) 是DF的属性, 对DF中的行数据或列数据应用func操作.
applymap(func) 也是DF的属性, 对整个DF所有元素应用func操作

到此这篇关于pandas map(),apply(),applymap()区别解析的文章就介绍到这了,更多相关pandas map(),apply(),applymap()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的rfind()方法使用详解
May 19 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
Python zip()函数用法实例分析
Mar 17 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Python docx库用法示例分析
Feb 16 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python global关键字的用法详解
Sep 05 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
python+openCV对视频进行截取的实现
Nov 27 Python
Python的Tqdm模块实现进度条配置
Feb 24 #Python
详解pandas apply 并行处理的几种方法
Feb 24 #Python
python自动生成sql语句的脚本
Feb 24 #Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 #Python
一文读懂python Scrapy爬虫框架
Feb 24 #Python
Django如何重置migration的几种情景
Feb 24 #Python
Django中的DateTimeField和DateField实现
Feb 24 #Python
You might like
php中截取字符串支持utf-8
2007/01/18 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
Python入门篇之字符串
2014/10/17 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
建材业务员岗位职责
2013/12/08 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
思想品德自我评价
2014/02/04 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
行政撤诉申请书
2015/05/18 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL