Pandas知识点-详解元素级批处理函数applymap和map

2023-11-16

Pandas知识点-详解元素级批处理函数applymap和map

在Pandas中,apply()可以对DataFrame和Series按列或行批处理,applymap()和map()可以分别对DataFrame和Series进行元素级的批处理。
apply()批处理参考:Pandas知识点-详解行列级批处理函数apply
与apply()相同,applymap()和map()只负责“批量”调度处理,批量执行的具体内容,由用户传入的函数决定(自定义或现成的函数)。
1.applymap用法和参数介绍
applymap(self, func, na_action=None, **kwargs) :
func: 应用于DataFrame每个元素的函数,这个函数可以是Python内置函数、Pandas或其他库中的函数、自定义函数、匿名函数。但函数必须满足一个参数、一个返回值。(returns a single value from a single value.)
na_action: 批处理时是否处理空值,支持两种设置:{None, ‘ignore’},默认为None,将空值作为np.nan传递给函数。如果将na_action设置为’ignore’,则批处理时跳过空值,不做处理。
**kwargs: 传递给函数func的关键字参数,新版本的Pandas中才支持此参数,低版本不一定支持。使用pandas==1.2.1不支持,使用pandas==1.4.1支持。
2.applymap函数使用举例

# coding=utf-8
import pandas as pd
import numpy as np


df = pd.DataFrame({'Col-1': [8, 3, 5], 'Col-2': [2, np.nan, 8], 'Col-3': [9, 8, 7], 'Col-4': [3, 6, 9]},
                  index=['X', 'Y', 'Z'])
print(df)
df2 = df.applymap(lambda x: x+10)  # 匿名函数
print('-' * 30, '\n', df2, sep='')
   Col-1  Col-2  Col-3  Col-4
X      8    2.0      9      3
Y      3    NaN      8      6
Z      5    8.0      7      9
------------------------------
   Col-1  Col-2  Col-3  Col-4
X     18   12.0     19     13
Y     13    NaN     18     16
Z     15   18.0     17     19
def make_ok(s, st='ok'):
    return '{}{}'.format(s, st)


df3 = df.applymap(make_ok)  # 自定义函数
print('-' * 30, '\n', df3, sep='')
df4 = df.applymap(make_ok, na_action='ignore')  # 不处理空值
print('-' * 30, '\n', df4, sep='')
df5 = df.applymap(make_ok, na_action='ignore', st='oooook')  # 传入关键字参数
print('-' * 40, '\n', df5, sep='')
------------------------------
  Col-1  Col-2 Col-3 Col-4
X   8ok  2.0ok   9ok   3ok
Y   3ok  nanok   8ok   6ok
Z   5ok  8.0ok   7ok   9ok
------------------------------
  Col-1  Col-2 Col-3 Col-4
X   8ok  2.0ok   9ok   3ok
Y   3ok    NaN   8ok   6ok
Z   5ok  8.0ok   7ok   9ok
----------------------------------------
     Col-1      Col-2    Col-3    Col-4
X  8oooook  2.0oooook  9oooook  3oooook
Y  3oooook        NaN  8oooook  6oooook
Z  5oooook  8.0oooook  7oooook  9oooook

applymap()不支持给func传位置参数,所以func必须只有一个位置参数,默认接收DataFrame中的元素。
applymap()不支持设置按列还是按行,因为applymap是对DataFrame的每个元素做处理,无需指定行/列。
applymap()不支持传入多个函数进行聚合处理,也不支持函数名用字符串的方式传入。
3.不使用applymap完成等价效果

df6 = df.applymap(np.square, na_action='ignore')
print('-' * 30, '\n', df6, sep='')
df7 = df ** 2
print('-' * 30, '\n', df7, sep='')
------------------------------
   Col-1  Col-2  Col-3  Col-4
X     64    4.0     81      9
Y      9    NaN     64     36
Z     25   64.0     49     81
------------------------------
   Col-1  Col-2  Col-3  Col-4
X     64    4.0     81      9
Y      9    NaN     64     36
Z     25   64.0     49     81
df8 = df.applymap(lambda x: x*2)
print('-' * 30, '\n', df8, sep='')
df9 = df.add(df)
print('-' * 30, '\n', df9, sep='')
------------------------------
   Col-1  Col-2  Col-3  Col-4
X     16    4.0     18      6
Y      6    NaN     16     12
Z     10   16.0     14     18
------------------------------
   Col-1  Col-2  Col-3  Col-4
X     16    4.0     18      6
Y      6    NaN     16     12
Z     10   16.0     14     18

有些用applymap()进行的批处理操作,用其他方式也可以实现,如直接对DataFrame进行运算或调用其他的函数。
4.map用法和参数介绍
map(self, arg, na_action=None):
arg: 应用于Series每个元素的映射关系(不仅仅是函数),可以传入满足一个参数一个返回值的函数,也可以传入字典或另一个Series。
na_action: 同applymap。
5.map函数使用举例

s = pd.Series(range(2, 11, 2), index=[alpha for alpha in 'abcde'])
print(s)
s1 = s.map(np.sqrt)  # 库函数
print('-' * 20, '\n', s1, sep='')
s2 = s.map(make_ok)  # 自定义函数
print('-' * 20, '\n', s2, sep='')
s3 = s.map(lambda x: x*3)  # 匿名函数
print('-' * 20, '\n', s3, sep='')
a     2
b     4
c     6
d     8
e    10
dtype: int64
--------------------
a    1.414214
b    2.000000
c    2.449490
d    2.828427
e    3.162278
dtype: float64
--------------------
a     2ok
b     4ok
c     6ok
d     8ok
e    10ok
dtype: object
--------------------
a     6
b    12
c    18
d    24
e    30
dtype: int64

map()中的函数可以传入库函数、自定义函数、匿名函数,但都需要满足一个参数一个返回值。
map()不支持给函数传入关键字参数。
6.map使用字典或另一个Series做映射

mydict = {2: 'two', 4: 'four', 6: 'six', 8: 'eight', 10: 'ten'}
s4 = s.map(mydict)
print('-' * 20, '\n', s4, sep='')
sx = pd.Series(mydict)
s5 = s.map(sx)
print('-' * 20, '\n', s5, sep='')
--------------------
a      two
b     four
c      six
d    eight
e      ten
dtype: object
--------------------
a      two
b     four
c      six
d    eight
e      ten
dtype: object

map()中传入一个字典时,字典的key需要与Series中的值对应,才能找到映射结果,找不到则结果为空。
map()中传入另一个Series时,传入的Series的index需要与原Series中的值对应,才能找到映射结果,找不到则结果为空。
7.applymap和map实现字符串拼接

df10 = df.applymap('oohoho{}'.format)
print('-' * 40, '\n', df10, sep='')
s6 = s.map('now data is {}'.format)
print('-' * 20, '\n', s6, sep='')
----------------------------------------
     Col-1      Col-2    Col-3    Col-4
X  oohoho8  oohoho2.0  oohoho9  oohoho3
Y  oohoho3  oohohonan  oohoho8  oohoho6
Z  oohoho5  oohoho8.0  oohoho7  oohoho9
--------------------
a     now data is 2
b     now data is 4
c     now data is 6
d     now data is 8
e    now data is 10
dtype: object

applymap()和map()支持直接给DataFrame或Series中的元素拼接字符串。
以上就是pandas中的applymap()和map()函数的用法介绍和分析,希望对你有帮助,如果你有其他的想法或疑问,欢迎找我一起交流讨论。

参考文档:
[1] pandas中文网:https://www.pypandas.cn/docs/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas知识点-详解元素级批处理函数applymap和map 的相关文章

随机推荐

  • Android studio心得——fragment动态加载

    前言 在Android应用程序中 Fragment是一种可以嵌入Activity中的组件 通过 Fragment 我们可以将UI 目录 前言 一 什么是Android Studio 二 简介Fragment 三 学期知识汇总 四 什么是碎片
  • C++类与对象--static修饰符

    C 类与对象 static修饰符 1 类静态数据成员的定义及初始化 1 1 声明 1 2 初始化 1 3 调用 1 4 案例 1 5 小结 2 类静态成员函数的定义 2 1 声明 2 2 调用 2 3 案例 2 4 小结 3 static
  • 数据库字段类型

    太长时间没有操作数据库 收集了部分有用的资料 一 创建数据表 CREATE TABLE mytable id VARCHAR 4 NOT NULL name VARCHAR 10 sex CHAR 1 createtime DATE age
  • ROS系统

    参考 https blog csdn net qq 28087491 article details 119053810 https www bilibili com video BV1zt411G7Vn spm id from 333 3
  • 静态网页怎样实现动态交互?-JavaScript

    在Html基础上 javascript能够开发交互式web网页 javascript的出现使得网页和用户之间实现了一种实时性的 动态的 交互性的关系 javascript短小精悍 又是在客户机上执行的 大大提高了网页的浏览速度和交互能力 同
  • Python高级培训第三次作业

    任务 作业 import threading 导入threading库 import time 导入time库 class Get time object 创建类Get time 用于获取当前时间 def init self each ti
  • “msg“:“Request method ‘GET‘ not supported“,“code“:500原因及解决

    GetMapping add parentId 这里的路径纠错 漏 了 controller 缺少add的保存方法 GetMapping add parentId 及其以下 Html出现错误 如下图
  • B树及其基本操作、B+树的基本概念

    B树及其基本操作 B 树的基本概念 1 B树 B 树的基本概念 1 B树的基本概念及性质 2 B 树的基本概念及性质 2 B树与B 树的区别 3 B树的基本操作 1 B树的查找 2 B树的插入 3 B树的删除 1 B树 B 树的基本概念 1
  • SpringBoot集成海康设备网络SDK

    文章目录 SDK介绍 概述 功能 下载 对接指南 集成 初始化项目 初始化SDK 初始化SDK概述 新建AppRunner 新建SdkInitService 新建InitSdkTask 新建 HCNetSDK 调用业务接口 部署 拷贝so库
  • 解决鼠标右击菜单的新建中没有“文本文档”的问题

    解决鼠标右击菜单的新建中没有 文本文档 的问题 原创 丶无殇 2022 2 12 注意 博主测试平台为WIN10系统 其他系统不保证一定可以 一 问题现象 在桌面右击打开新建菜单时没有文本文档这个选项 二 问题原因 有以下可能 安装某个软件
  • 单链表的数据结构和基本操作

    单链表的基本操作 头结点单链表的基本操作 头结点单链表的数据结构 头结点的初始化 插入新结点 头插法插入新结点 尾插法插入新结点 按位置插入新结点 删除节点 头删 尾删 按位置删 头指针单链表的基本操作 实现代码 链表是一种线性结构 在存储
  • UE4 技能系统(GAS插件的使用) 01--Build Basic Classes 创建基础类

    翻译自Udemy的视频课程introduction to unreal engine 4 ability system Build Basic Classes 创建基础类 1 创建工程和人物设置 01 创建Git仓库 使用UE4 22 VS
  • CUDA学习(二十三)

    Direct3D互操作性 Direct3D 9Ex Direct3D 10和Direct3D 11支持Direct3D互操作性 CUDA上下文只能与满足以下条件的Direct3D设备互操作 必须使用设置为D3DDEVTYPE HAL的Dev
  • 脚本之抢课脚本

    UserScript name New Userscript namespace http tampermonkey net version 0 1 description try to take over the world author
  • 前后端分离 获取客户端ip_前后端分离交互

    新开一个项目 对最近学的vue进行一个总结 这段时间把前后端通信做掉 后端 介绍下使用到的工具类 请求工具 postman 后端框架 springboot 这里顺便做了个模块化 把通用工具集放common模块中 但是这里有个问题 其实我自己
  • QT入门Input Widgets之QComboBox

    目录 一 界面布局功能 1 界面位置介绍 2 界面常用操作属性 2 1基本属性 2 2添加子项目 二 属性功能介绍 1 代码添加item 2 批量插入 3 设置当前显示的索引 4 清除掉所有item 5 切换item获得索引值与当前文本 三
  • 云服务器下centos7.3 nginx动态负载均衡

    nginx动态负载均衡 什么是nginx动态负载均衡呢 传统的负载均衡 如果Upstream参数发生变化 每次都需要重新加载nginx conf文件 因此扩展性不是很高 所以我们可以采用动态负载均衡 实现Upstream可配置化 动态化 无
  • 关于小贷公司与平台合作的一点感想

    一 1 有人说小额贷款行业经过了革命浪漫主义 传统信贷 数据 数据爆炸几个阶段 现在应该是平台合作阶段了 且不说这样的论述有推销数字化平台服务之功利性 小贷行业不过10年出头 一个行业阶段的孕育 发展到变革是漫长的 哪有那么多阶段 2 我认
  • 三维重建入门学习————建模软件Blender入门篇

    背景介绍 关于近期在进行三维重建相关算法学习的时候 学得越深 发现对各个方面的知识要求得越多 之前是补了相机的拍照原理 成像原理知识 再后来还补了主流的点提取 匹配算法等等 到了最近 论文 抑或是其他技术性文章出现的纹理 贴图等等词 总会让
  • Pandas知识点-详解元素级批处理函数applymap和map

    Pandas知识点 详解元素级批处理函数applymap和map 在Pandas中 apply 可以对DataFrame和Series按列或行批处理 applymap 和map 可以分别对DataFrame和Series进行元素级的批处理