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 05 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
python删除服务器文件代码示例
Feb 09 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python读取LMDB中图像的方法
Jul 02 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
python+requests接口自动化框架的实现
Aug 31 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
python3处理word文档实例分析
Dec 01 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
Python数据可视化之画图
2019/01/15 Python
Python中Numpy mat的使用详解
2019/05/24 Python
Python对列表的操作知识点详解
2019/08/20 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
团员的自我评价
2013/12/01 职场文书
创新型城市实施方案
2014/03/06 职场文书
学生会主席演讲稿
2014/04/25 职场文书
软件项目开发计划书
2014/05/01 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书