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中常用操作字符串的函数与方法总结
Feb 04 Python
Python win32com 操作Exce的l简单方法(必看)
May 25 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
详解用python生成随机数的几种方法
Aug 04 Python
python中对_init_的理解及实例解析
Oct 11 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
python tkinter控件布局项目实例
Nov 04 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python识别验证码的实现示例
Sep 30 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文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python爬虫基础知识点整理
2020/06/02 Python
什么是设计模式
2012/06/17 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
自考生自我评价分享
2014/01/18 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
成本会计实训报告
2014/11/05 职场文书
伏羲庙导游词
2015/02/09 职场文书
2015年质检工作总结
2015/05/04 职场文书
地道战观后感500字
2015/06/04 职场文书
小学见习报告
2015/06/23 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL