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字符遍历的艺术
Sep 06 Python
python PyTorch预训练示例
Feb 11 Python
python学生管理系统学习笔记
Mar 19 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
详解Python time库的使用
Oct 10 Python
python绘制雪景图
Dec 16 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
python-xpath获取html文档的部分内容
Mar 06 Python
Python 如何实现数据库表结构同步
Sep 29 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python tkinter Entry控件的焦点移动操作
May 22 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类
2006/07/15 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
一个极为简单的requirejs实现方法
2016/10/20 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
竞聘上岗演讲稿范文
2014/01/10 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript