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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
python字符串对其居中显示的方法
Jul 11 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
Python装饰器简单用法实例小结
Dec 03 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python实现最大优先队列
Aug 29 Python
Python接口测试get请求过程详解
Feb 28 Python
python判断正负数方式
Jun 03 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 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
用header 发送cookie的php代码
2007/03/16 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
js实现点击生成随机div
2020/01/16 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
pycharm运行scrapy过程图解
2019/11/22 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python的列表List求均值和中位数实例
2020/03/03 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
优秀毕业生就业推荐信
2014/05/22 职场文书
工商管理自荐书
2014/07/06 职场文书
圆明园观后感
2015/06/03 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android