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的*args和**kwargs用法
Nov 01 Python
python魔法方法-属性访问控制详解
Jul 25 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
PyTorch中的C++扩展实现
Apr 02 Python
通过Python实现一个简单的html页面
May 16 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
python中round函数如何使用
Jun 19 Python
Python字符串函数strip()原理及用法详解
Jul 23 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判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
js验证上传图片的方法
2015/05/12 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
Python3简单实现串口通信的方法
2019/06/12 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
25道Java面试题集合
2013/05/21 面试题
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
无房证明样本
2015/06/17 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫