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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python每天必学之bytes字节
Jan 28 Python
Python正则表达式使用经典实例
Jun 21 Python
python实现简单淘宝秒杀功能
May 03 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python 实现return返回多个值
Nov 19 Python
python数值基础知识浅析
Nov 19 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
Pycharm打开已有项目配置python环境的方法
Jul 03 Python
python logging模块的使用详解
Oct 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
使用Apache的rewrite技术
2006/06/22 PHP
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序form表单组件示例代码
2018/07/15 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python字符串处理之count()方法的使用
2015/05/18 Python
神经网络python源码分享
2017/12/15 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python树莓派红外反射传感器
2019/01/21 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
德国网上药房:Apotal
2017/04/04 全球购物
教师绩效考核方案
2014/01/21 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
小学生学习感言
2014/03/10 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
家庭贫困证明
2014/09/23 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2015年统战工作总结
2015/05/19 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书