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抢过年的火车票附源码
Dec 07 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
Python人脸识别初探
Dec 21 Python
Python实现快速计算词频功能示例
Jun 25 Python
从0开始的Python学习016异常
Apr 08 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python WSGI 规范简介
Apr 11 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
PHP 编写大型网站问题集
2010/05/07 PHP
php文件缓存方法总结
2016/03/16 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS 字符串连接[性能比较]
2009/05/10 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Python中的日期时间处理详解
2016/11/17 Python
python开发简易版在线音乐播放器
2017/03/03 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
pytorch打印网络结构的实例
2019/08/19 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
python numpy数组中的复制知识解析
2020/02/03 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
结构和类有什么异同
2012/07/16 面试题
Delphi软件工程师试题
2013/01/29 面试题
口腔医学技术应届生求职信
2013/11/09 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
优秀纪检干部材料
2014/08/27 职场文书
一个独生女的故事观后感
2015/06/04 职场文书