Pandas-apply自定义函数
文章目录
- 一. Series的apply方法
- 1. 一个元素一个元素的传入
- 2. apply传入一个参数函数
- 2.apply传入多个参数函数
- 二. DataFrame的apply方法
- 1. axis参数指定按行/ 按列(默认)传入数据
- 2. apply使用
- 三. apply 使用案例
- 1. 栗子1
- 2. 栗子2-列
- 3. 栗子3-行
- 四. 向量化函数
- 1. 使用np.vectorize将函数向量化
- 2. 使用装饰器将函数向量化
- 五. lambda函数
简介
Pandas提供了很多数据处理的API,但当提供的API不能满足需求的时候,需要自己编写数据处理函数, 这个时候可以使用apply函数
apply函数可以接收一个自定义函数, 可以将DataFrame的行/列数据传递给自定义函数处理
apply函数类似于编写一个for循环, 遍历行/列的每一个元素,但比使用for循环效率高很多
一. Series的apply方法
1. 一个元素一个元素的传入
def my_print(x):print('****************')print(x)print(type(x))return xdf['a'].apply(my_print)

2. apply传入一个参数函数
准备数据
import pandas as pd
df = pd.DataFrame({'a':[10,20,30],'b':[40,50,60]})
df

创建一个自定义函数
def my_sq(x):'''求平方'''return x**2
apply方法有一个func参数, 把传入的函数应用于Series的每个元素
df['a'].apply(my_sq)

注意,把my_sq传递给apply的时候,不要加上圆括号
2.apply传入多个参数函数
def my_exp(x,e):return x**e
df['a'].apply(my_exp,e=3)

二. DataFrame的apply方法
1. axis参数指定按行/ 按列(默认)传入数据
def my_func(x):print(x)print('x的数据类型是',type(x))return xdf.apply(my_func)

def my_func(x):print(x)print('x的数据类型是',type(x))return xdf.apply(my_func,axis = 1)

2. apply使用
把上面创建的my_exp, 直接应用到整个DataFrame中
df.apply(my_exp,e=2)

def avg_3(col):x = col[0]y = col[1]z = col[2]return (x+y+z)/3df.apply(avg_3)

def avg_2(row):x = row[0]y = row[1]return (x+y)/2df.apply(avg_2, axis=1)

三. apply 使用案例
使用titanic数据集来介绍apply的用法
加载数据
titanic = pd.read_csv('data/titanic_train.csv')
titanic.head()

titanic.info()

该数据集有891行,12列, 其中age 和 Cabin,Embarked三列中包含缺失值
1. 栗子1
import numpy as np#可以使用apply计算数据中有多少null 或 NaN值
def count_missing(vec):#计算一列中缺失值的个数#根据值是否确实获取一个由True和False组成的向量null_vec = pd.isnull(vec)#print(null_vec)null_count = np.sum(null_vec)return null_count#缺失值占比
def prop_missing(vec):# 计算一列中缺失值的占比# 计算缺失值的个数#这里使用count_missing()num = count_missing(vec) #获得向量中元素的个数#也需要统计缺失值个数dem = vec.sizereturn num/dem# 非缺失值占比
def prop_complete(vec):#计算一列非缺失值(完整值)占比#先计算缺失值比例#再计算非缺失值比例return 1-prop_missing(vec)
把前面定义好的函数应用于数据的各列
titanic.apply(count_missing)

titanic.apply(prop_missing)

titanic.apply(prop_complete)

把前面定义好的函数应用于数据的各行
titanic.apply(count_missing ,axis = 1)

titanic.apply(prop_missing ,axis = 1)

titanic.apply(prop_complete ,axis = 1)

titanic.apply(count_missing, axis=1).value_counts()

2. 栗子2-列
def cut_age(age):if age<18:return '未成年'elif 18<=age<40:return '青年'elif 40<=age<60:return '中年'elif 60<=age<81:return '老年'else:return '未知'
titanic['Age'].apply(cut_age).value_counts()

#筛选出年龄大于60的数据
titanic[titanic['Age']>=60]
3. 栗子3-行
# Pclass = 1 并且 Name中 包含了Master/Dr/Sir
def get_vip(x):if x['Pclass'] ==1 and ('Master' in x['Name'] or 'Dr' in x['Name'] or 'Sir' in x['Name'] ):return 'VIP'else:return 'Normal'
titanic['vip'] = titanic.apply(get_vip,axis=1)
titanic['vip'].value_counts()

# 筛选出vip客户
titanic[titanic['vip']=='VIP']

四. 向量化函数
创建一个DataFrame
df = pd.DataFrame({'a':[10,20,30],'b':[20,30,40]})

创建函数
def avg_2(x,y):return (x+y)/2
avg_2(df['a'],df['b'])

修改函数
def avg_2_mod(x,y):if x==20:return np.nanreturn (x+y)/2
avg_2(df['a'],df['b'])


1. 使用np.vectorize将函数向量化
avg_2_mod_vec = np.vectorize(avg_2_mod)
avg_2_mod_vec(df['a'], df['b'])

2. 使用装饰器将函数向量化
@np.vectorize
def avg_2_mod(x,y):if x==20:return np.nanreturn (x+y)/2
avg_2_mod(df['a'],df['b'])

五. lambda函数
当函数比较简单的时候, 没有必要创建一个def 一个函数, 可以使用lambda表达式创建匿名函数
df.apply(lambda x: x+1)

相关文章:
Pandas-apply自定义函数
文章目录 一. Series的apply方法1. 一个元素一个元素的传入2. apply传入一个参数函数2.apply传入多个参数函数 二. DataFrame的apply方法1. axis参数指定按行/ 按列(默认)传入数据2. apply使用 三. apply 使用案例1. 栗子12. 栗子2-列3. 栗子3-行 四. 向量化函数1. 使用np.vect…...
github 项目分享
今天和大家分享一些github上面搜到关于卫星遥感和水环境相关的项目。 一、WaterDetect 使用端到端算法去识别水体范围的算法,针对哨兵2卫星遥感数据可用。 项目地址: https://github.com/cordmaur/WaterDetect 二、DeepWaterMap 深度卷积神经网络去…...
与你共度的烟火日常
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... 我和她一起收拾完屋子,忙完已经中午了。她说:“咱们去趟超市吧&…...
基于Python的社交音乐分享平台
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
Kafka的acks机制和ISR列表
Kafka 是一个流行的分布式流处理平台,用于构建实时数据流管道和应用程序。在 Kafka 中,acks 机制和 ISR(In-Sync Replicas)列表是两个重要的概念,它们共同确保消息的持久性和可靠性。 acks 机制 acks 机制是 Kafka 生…...
FreeRTOS: ISR(中断服务例程)和 TCB(任务控制块)
在讨论 ISR(中断服务例程)和 TCB(任务控制块,Task Control Block)时,我们实际上是在探讨 FreeRTOS 中两个不同但又相互关联的概念:一个是用于处理硬件或软件触发的中断事件,另一个是…...
【Spring】Spring DI(依赖注入)详解—自动装配—byType实现原理
一、引言 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一,它通过控制反转(Inversion of Control, IoC)来管理对象的生命周期和依赖关系。在实际应用中,DI不仅提高了代码的可维护性和可测试…...
015-spring-动态原理、AOP的xml和注解方式
强制使用cglib动态代理 spring-AOP的使用...
linux更换yum源
1.备份系统源文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak2.下载国内的yum源到/etc/yum.repos.d/CentOS-Base.repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo如无法使用wget命令也可以…...
跨年战揭开本地生活新赛季:美团、抖音和快手争夺冰雪经济
元旦将至,冬季文旅消费渐至高潮。 2024年的文旅消费市场延续了去年冰雪游的热度,不断创下年内话题和热度新高。美团旅行数据显示,12月以来,雪场夜滑搜索热度同比增长65%,TOP5搜索城市分别是北京、乌鲁木齐、张家口、吉…...
文件传输工具FTransferor<优化篇>
在上一篇文章中,我们详细探讨了FTransferor文件传输工具的设计与实现,并展示了它在局域网文件传输方面的高效性。然而,随着互联网应用场景的不断丰富,传统的基于 TCP/UDP 的传输方式已经无法满足部分开发者的需求。特别是在跨平台…...
【最新】17个一站式数据集成平台案例PPT下载(Apache SeaTunnel )
17个Apache SeaTunnel案例下载见附件! 开发篇 1.Apache SeaTunnel——OLAP 引擎的数据动脉 1.1项目定位——EtLT 时代的新一代数据集成平台 1.2Apache SeaTunnel 核心功能 1.3Apache SeaTunnel 在 OLAP 场景下的应用 1.4WhaleTunnel 产品特性 2.教你从头到尾开发一…...
【每日学点鸿蒙知识】子窗口方向、RichEdit不居中、本地资源缓存给web、Json转对象丢失方法、监听状态变量数组中内容改变
1、HarmonyOS 应用新建子窗口设置显示方向未生效? 子窗口getPreferredOrientation获取到的是横向 设置没问题,但是ui显示还是纵向的 直接设置主窗口的方向即可。参考demo: import window from ohos.window;Entry Component struct Index {…...
【AI绘画】Midjourney前置指令/imagine与单图指令详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯Midjourney前置指令/imagine什么是前置指令?/imaginepromptUpscale(图像分离)Variations(变化)🔄&a…...
【鸿蒙NEXT】鸿蒙里面类似iOS的Keychain——关键资产(@ohos.security.asset)实现设备唯一标识
前言 在iOS开发中Keychain 是一个非常安全的存储系统,用于保存敏感信息,如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同,Keychain 提供了更高的安全性,因为它对数据进行了加密,并且只有经过授权的应用程序才…...
学习笔记 --C#基础其他知识点(数据结构)
C#中的数据结构《二》–视频学习笔记 在数据结构的分类: 1.集合 2.线性 3.树形 4.图状结构 数据结构是数据在程序中的存储结构,和基本的数据操作 算法:解决问题的解决思路,基于数据结构 本课程包括:线性表ÿ…...
AI与药学 | ChatGPT 在临床药学中的有效性以及人工智能在药物治疗管理中的作用
《Effectiveness of ChatGPT in clinical pharmacy and the role of artificial intelligence in medication therapy management》这篇文献研究了ChatGPT在临床药学,特别是在药物治疗管理(MTM)中的有效性。 一、研究背景 (Background) MTM …...
Streamlining QA with Automated Testing for 3D Models
Quality assurance testing in 3D modeling is like walking a tightrope. Balancing the need for detailed accuracy and the time it takes to achieve it is no small feat. But what if we could make the tightrope wider, the task less daunting? And it’s where aut…...
产品原型设计
🤣🤣目录🤣🤣 一、Axure原型设计(Axure RP 9 )1.1 软件下载安装1.2 产品原型展示1.3 产品原型下载1.4 视频课程推荐 二、磨刀原型设计2.1 软件下载安装2.2 产品原型展示2.3 产品原型下载2.4 视频课程推荐 什…...
【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别
su 命令 su (Switch User 切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
