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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
Django框架实现的分页demo示例
May 25 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
如何利用python读取micaps文件详解
Oct 18 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
Pytorch之扩充tensor的操作
Mar 04 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 shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
Yii核心验证器api详解
2016/11/23 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
小区文明倡议书
2014/05/16 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
解析目标检测之IoU
2021/06/26 Python
Golang表示枚举类型的详细讲解
2021/09/04 Golang
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL