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和GO语言实现的消息摘要算法示例
Mar 10 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
Python OS模块实例详解
Apr 15 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
python Tkinter的简单入门教程
Apr 11 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python实现合并两个数组的方法
2015/05/16 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python中的枚举类型示例介绍
2019/01/09 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
类和结构的区别
2012/08/15 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
天地会口号
2014/06/17 职场文书
药品开票员岗位职责
2015/04/15 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
Python超详细分步解析随机漫步
2022/03/17 Python
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
详解Python中__new__方法的作用
2022/03/31 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android
python解析照片拍摄时间进行图片整理
2022/07/23 Python