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 pickle 和 shelve模块的用法
Sep 16 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
Django中的Signal代码详解
Feb 05 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
Python实现的堆排序算法示例
Apr 29 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
Python爬虫将爬取的图片写入world文档的方法
Nov 07 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
javascript String 对象
2008/04/25 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
使用python绘制温度变化雷达图
2019/10/18 Python
python类中super() 的使用解析
2019/12/19 Python
如何使用repr调试python程序
2020/02/28 Python
python爬虫容易学吗
2020/06/02 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
应届大学生求职信
2013/12/01 职场文书
三严三实心得体会范文
2014/10/13 职场文书
甲午大海战观后感
2015/06/02 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
同学会感言
2015/07/30 职场文书
朋友离别感言
2015/08/04 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL