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对小数进行除法运算的正确方法示例
Aug 25 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
详解C++编程中一元运算符的重载
Jan 19 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
pandas的object对象转时间对象的方法
Apr 11 Python
python-str,list,set间的转换实例
Jun 27 Python
Python3.5装饰器原理及应用实例详解
Apr 30 Python
Python for循环与getitem的关系详解
Jan 02 Python
TensorFlow固化模型的实现操作
May 26 Python
python爬虫可以爬什么
Jun 16 Python
python文件及目录操作代码汇总
Jul 08 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制作静态网站的模板框架(四)
2006/10/09 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
javascript比较文档位置
2008/04/08 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
vue如何搭建多页面多系统应用
2020/06/17 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python continue语句用法实例
2014/03/11 Python
在Django中创建动态视图的教程
2015/07/15 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python分析作业提交情况
2017/11/22 Python
python中dict()的高级用法实现
2019/11/13 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
python解包概念及实例
2021/02/17 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
Python如何实现单例模式
2016/06/03 面试题
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2014年采购工作总结
2014/11/20 职场文书
导游欢送词
2015/01/31 职场文书
文明礼仪主题班会
2015/08/13 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书