Pandas数据分析基础—pandas自带函数map()/apply()/applymap()

news2024/12/23 9:05:11

文章目录

  • 前言
  • 一、Series数据处理
    • 1、map()方法
    • 2、apply()方法
    • 3、applymap()方法
    • 总结
  • 二、DataFrame数据处理
    • 1、map()方法
    • 2、apply()方法
    • 3、applymap()方法
    • 总结
  • 三、map、apply、applymap三个函数区别


前言

在进行数据处理时,经常会对一个DataFrame展开逐行、逐列、逐元素的操作,对应这些操作,常常使用Pandas中的map、apply和applymap三个函数进行处理。本文主要讲这三个函数在series、dataframe数据结构下应用情况及三个函数的区别。


模拟的样本数据

boolean=[True,False]
channel=["T","N"]
data=pd.DataFrame({
    "A":np.random.randint(150,190,10),
    "B":np.random.randint(40,90,10),
    "C":[boolean[x] for x in np.random.randint(0,2,10)],
    "D":[channel[x] for x in np.random.randint(0,2,10)]
}
)
data

在这里插入图片描述

一、Series数据处理

1、map()方法

  • 使用字典进行映射

举例:
要求:将D列中”N“换为0,”T“为1。

data['D']=data['D'].map({'N':0,'T':1})
data

在这里插入图片描述

  • 使用函数

举例:
要求:将D列中”N“换为0,”T“为1。

def func(values):
	if values=='N':
		return 0
	else:
		return 1

data['D']=data['D'].map(func)
data

在这里插入图片描述

不管是利用字典还是函数进行映射,map方法都是把对应的数据逐个当作参数传入到字典或函数中,得到映射后的值。

2、apply()方法

  • 使用函数做映射

举例:
要求:将D列中”N“换为0,”T“为1。

def func(values):
	if values=='N':
		return 0
	else:
		return 1

data['D']=data['D'].apply(func)
data

在这里插入图片描述

  • apply可以输入额外的参数
    可以给apply调用函数添加多个参数,在apply里加上args=,将其他参数组成一个元组代入函数中。注意:只有一个额外参数时需要写成这种形式:(‘额外参数1’,),加一个’,',代表是一个元组。

举例:
要求:将A列中所有数值减去100。

def func(values,x):
	return values+x

data['A']=data['A'].apply(func,args=(-100,))
data

在这里插入图片描述

  • 不可以用字典来做映射

举例:
要求:将D列中”N“换为0,”T“为1。

data['D']=data['D'].apply({'N':0,'T':1})
data

在这里插入图片描述

3、applymap()方法

  • series没有applymap函数。

总结

  • Series的map可以直接输入字典做关系映射,apply不行。
  • Series的apply可以输入函数之外的额外参数,map不行。
  • Series的apply和map都可以输入函数做数据处理。
  • Series没有applymap函数。
  • Series的apply是不能直接输入字典做关系映射,不是不能输入字典。

二、DataFrame数据处理

1、map()方法

  • DataFrame中没有map()方法

2、apply()方法

  • 对比Series的apply,DataFrame的apply多了一个核心参数axis:
    当axis=1时,对每行执行指定函数。
    当axis=0时,对每列执行指定函数。

举例1
要求:对比A、B两列,求每行最大值

import numpy as np 
data[['A','B']].apply(np.max,axis=1)

在这里插入图片描述
举例2
要求:求A、B两列的最大值

import numpy as np 
data[['A','B']].apply(np.max,axis=0)

在这里插入图片描述

3、applymap()方法

  • applymap会对DataFrame中每个单元格执行指定函数的操作

举例:
要求:将dataframe中所有的值保留两位小数显示,使用applymap可以很快达到你想要的目的

import pandas as pd
data = pd.DataFrame(
    {
        "A":np.random.randn(5),
        "B":np.random.randn(5),
        "C":np.random.randn(5),
        "D":np.random.randn(5),
        "E":np.random.randn(5),
    }
)
data 

data .applymap(lambda x:"%.2f" % x)

在这里插入图片描述
在这里插入图片描述

总结

  • DataFrame没有map函数。
  • DataFrame的apply是对行(可以单行也可以多行)或列(可以单列也可以多列)执行指定函数的操作,有axis参数,当axis=1,对每行执行指定函数,当axIs=0时,对每列执行指定函数。
  • DataFrame中applymap会对每个单元格执行指定函数的操作。

三、map、apply、applymap三个函数区别

  • map:应用在单独一个Series的每个元素中,只针对单列。

  • apply:应用在DataFrame的行或列中,也可以应用到单独一个Series的每个元素中,针对多列,也可以单列。

  • applymap:应用在DataFrame的每个元素中。针对DataFrame全部元素。apply想要直接对每个元素进行操作,得单独取出serires才可以实现,不能直接在整个DataFrame上执行。


参考文章:

https://zhuanlan.zhihu.com/p/100064394
https://zhuanlan.zhihu.com/p/133722455
https://zhuanlan.zhihu.com/p/584036056

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

three.js(二):webpack + three.js + ts

用webpackts 开发 three.js 项目 webpack 依旧是主流的模块打包工具;ts和three.js 是绝配,three.js本身就是用ts写的,ts可以为three 项目提前做好规则约束,使项目的开发更加顺畅。 1.创建一个目录,初始化 npm mkdir demo cd de…

【项目 计网8】4.23 TCP状态转换 4.24半关闭、端口复用

文章目录 4.23 TCP状态转换关于三次握手四次挥手 4.24半关闭、端口复用端口复用 4.23 TCP状态转换 2MSL(Maximum Segment Lifetime) 主动断开连接的一方,最后进入一个TIME_WAIT状态,这个状态会持续:2msl msl:官方建议:…

Linux 多进程解决客户端与服务器端通信

写一个服务器端用多进程处理并发,使两个以上的客户端可以同时连接服务器端得到响应。每当接受一个新的连接就fork产生一个子进程,让子进程去处理这个连接,父进程只用来接受连接。 与多线程相比的不同点:多线程如果其中一个线程操…

Kubernetes(K8s 1.28.x)部署---创建方式Docker(超详细)

目录 一、基础环境配置(所有主机均要配置) 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…

RocketMQ消息队列-@RocketMQMessageListener实现原理

使用Spring-RocketMQ时,只需要引入rocketmq-spring-boot-starter包,并且定义以下消费者,就可以很简单的实现消息消费 Component RocketMQMessageListener(topic "first-topic", consumerGroup "my-producer-group", s…

过滤器的应用-Filter

过滤器 1.工作原理 2.创建Filter 2.1通过注解的方式实现 //创建一个类,实现Filter接口 WebFilter(urlPatterns "/myfilter") //urlPatterns表示需要拦截的路径 public class MyFilter implements Filter {Overridepublic void doFilter(ServletReques…

深度解读NeuS代码(1):输入数据格式

准备训练数据 在preprocess_cutsom_data中,笔者采取第二个经过colmap的方法。但是这个方法其实需要一个前置结果,即colmap与LLFF的处理。接下来分别讨论: Colmap 一个非常好的操作流程在这里: https://zhuanlan.zhihu.com/p/57…

Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

Kubernetes安装NFS动态供给存储类并安装KubeSphere KubeSphere介绍环境准备KubeSphereNFS动态供给 安装NFS动态供给搭建NFS下载动态供给驱动修改驱动文件安装动态供给 安装KubeSphere下载KubeSphere的yaml资源清单文件安装KubeSphere 使用KubeSphere部署应用创建项目部署MySQL …

Android 13 - Media框架(9)- NuPlayer::Decoder

这一节我们将了解 NuPlayer::Decoder,学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容,如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单,越读越发现自己的无知,Android 源码真…

nginx-缓存

disk cache:磁盘缓存数据,有时间延迟,但是非常小,相对于直接请求服务器返回 对于用户来说基本无感知。 memory cache:磁盘缓存数据,基本上没有时间延迟 协商缓存(nginx自带功能, 不…

机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…

18.kthread_worker:内核线程异步传输

目录 kthread_worker 驱动传输数据的方式 同步传输 异步传输 头文件 kthread_worker结构体 kthread_work结构体 kthread_flush_work结构体 init_kthread_worker()函数 为kthread_worker创建内核线程 init_kthread_work()函数 启动工作 刷新工作队列 停止内核线程…

3D点云测量:计算三个平面的交点

文章目录 0. 测试效果1. 基本内容文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 计算三个平面的交点需要找到满足所有三个平面方程的点。三个平面通常由它们的法向量和通过它们的点(或参数形式的方程)来定义。以下是计算三个平面的交点的一般步…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装,即本机需要有sftp 配置传输端口 安装成功后,使用快捷键"ctrlshiftp",输入sftp,选择Config 根据自己的实际情况修改配置文件,主要改h…

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,…

排序之交换排序

文章目录 前言一、冒泡排序1、冒泡排序基本思想2、冒泡排序的效率 二、快速排序 -- hoare版本1、快速排序基本思想2、快速排序代码实现3、为什么最左边值做key时,右边先走 三、快速排序 -- 挖坑法1、快速排序 -- 挖坑法基本思想2、快速排序 -- 挖坑法代码实现3、为什…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么?二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改 三、差异随机种子1. webUI位置2. 什么是差异随机种子3.使用差异…

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…

安装bpftrace和bcc的踩坑记录

最后在Ubuntu22.04使用Ubuntu提供的安装命令完成了安装。这里是记录尝试在Ubuntu18.04和Ubuntu22.04使用源码安装未果的过程。 文章目录 22版本安装bcc准备工具安装命令使用报错:iovisor封装的安装方式ubuntu的安装方式 For Bionic (18.04 LTS)官方提供的源码安装准…

SpringCloudGateway集成SpringDoc

SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级,按客户要求升级Spring版本,原来用着SpringBoot 2.2.X版本,只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求,可是好像最新的SpringBoot 2.X貌似也不…