目录

一、向量化与伪向量化

1、向量化

2、np.vectorize 伪向量化(特定场景)

3、apply(自定义函数)

二、apply函数

1、对series中使用apply

2、对dataframe中使用apply

3、apply函数案例-泰坦尼克号数据集]

数据集下载链接:

链接:https://pan.quark.cn/s/2598999d11dd?pwd=Xx7N
提取码:Xx7N

一、向量化与伪向量化

        在pandas中,向量化操作指的是直接在整个数组上执行操作,而不是循环遍历每个元素,这些操作底层是由高效的c代码实现的,并且利用了现代的cpu的SIMD指令(单指令多数据流),向量化操作在pandas和numpy中非常常见。

1、向量化

        (1)操作示例

import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]]})
df['C'] = df['A'] + df['B'] # 列与列相加
df['D'] = df['A'] * 10      # 列乘以标量
df['E'] = np.log(df['A'])   # 使用numpy的log函数作用于整列

        (2)向量化特点:

                        极高性能:比循环快100-1000倍

                        简洁的语法:类似于数学公式的表达方式

                        广泛的支持:数学、统计、字符串、日期等操作

2、np.vectorize 伪向量化(特定场景)

        np.vectorize是一个将普通的python函数转换成能够处理numpy数组的函数(伪向量化函数),注意:它不是真正的向量化,底层仍然是循环遍历每个元素,只是实现了一种方便的接口。可以使我们可以像向量化函数一样去调用它。

    (1)np.vectorize 伪向量化特点:

                伪向量化:内部仍然是python循环,仅提供了向量化接口

                性能比纯循环快2-5倍左右,但是比真正的向量化慢10-100倍

                优势在于简化了代码结构

      (2)使用场景:

                场景1:当需要一个自定义标量函数应用到数组的每个元素,且该函数无法用pandas/numpy内置函数直接表示时。
                例如:我们有一个复杂的函数,包含了多个条件的分支

def my_fun(x):
if x < 0:return 0
elif 0 <= x < 1:return x ** 2
else:return 2*x - 1# 使用np.vectorize
vfunc = np.vectorize(my_fun)# 应用在series
s = pd.Series([-0.5, 0.3, 0.9, 1.5, 2.0])
result = vfunc(s) # 返回:[0, 0.09, 0.81, 2.0, 3.0]

                场景2:当函数有多个参数(其中有一些函数需要固定)时

def my_fun2(x, a, b):return a * x + b
# 需要固定a和b的值,只有x向量化
vfunc2 = np.vectorize(my_fun2, excluded=['a', 'b']))

3、apply(自定义函数)

apply()函数是pandas的方法,沿着dataFrame的轴(行或者列)应用自定义函数

        特点:
            灵活:既可以处理行又可以处理列
            性能比较低:本质上是循环操作

性能:向量化函数>伪向量化函数>apply(自定义函数)

二、apply函数

        apply函数是pandas中自由度(自定义)最高的函数之一,用来对series、dataframe或者分组对象应用自定义函数。
核心行为:
    1:对series,逐个元素进行处理(输入单个值,输出单个值)
    2:对dataframe,按照行(axis=1)或者列(axis=0)传递数据(输入整行/整列数据,输出结果)
    3:对groupby对象,处理每个分组(输入分组子集,输出聚合结果)
核心作用:替代循环,实现批量处理,代码简介高效。
特点:逐行处理

1、对series中使用apply

需求:自定义函数my_fun1(),实现接受series对象,然后将接收到的每一个元素,计算其平方结果

def my_fun1(x):return x ** 2s = pd.Series([1,2,3,4])
r1 = s.apply(my_fun1)
print(r1)

输出结果:
0     1
1     4
2     9
3    16
dtype: int64

需求:自定义函数my_fun2(),接受传入参数的函数,例如:my_fun2(x, e)

def my_fun2(x, e):return x ** er2 = s.apply(my_fun2, e=3)
print(r2)

0     1
1     8
2    27
3    64
dtype: int64

2、对dataframe中使用apply

        series的apply函数调用自定义函数,自定义函数接收到是数组中的每个元素,df接收到的是一整行或者整列

#1:创建df对象,创建两个列
df = pd.DataFrame({'a':[10,20,30], 'b': [20,30,40]})
print(df.head())# 2:创建自定义函数my_fun3(), 作用于df对象
def my_fun3(x):print(f"x的内容:\n{x}")print(f"x的类型:{type(x)}")# 直接调用上述的my_fun3(),作用于df对象
# 不需要接受返回值输出,因为这个自定义函数没有返回值
df.apply(my_fun3)   # 默认是按照列输出
df.apply(my_fun3, axis=0)   # axis值为0,就是按照列输出
df.apply(my_fun3, axis=1)   # axis值为1,就是按照行输出

3、apply函数案例-泰坦尼克号数据集

import pandas as pd
df = pd.read_csv("data/titanic_train.csv")# 需求1:自定义函数,分别计算泰坦尼克号数据集某列的缺失值的个数,某列的缺失值占比,某列的非缺失值占比
# pd.isnull
def count_missing(vec):# vec就是接受到dfs对象的某列或者某行数据(要么是一整行数据要么是一整列数据)return pd.isnull(vec).sum() # 对传入的一整行或者一整列,计算缺失值的数量# 某列的缺失值占比
def prop_missing(vec):# 缺失值的占比公式:某列的缺失值数量/某列的元素的总个数return pd.isnull(vec).sum() / vec.size# 某列的非缺失值占比
def prop_complete(vec):return 1-prop_missing(vec)# 测试上面的函数
# 默认:axis=0, 即:以列的方式传入的
print(f"以列的形式传入,计算某列的缺失值个数:\n{df.apply(count_missing)}") # 计算的是所有的列,没有指定某个列,所有列中缺失值的数量
print(f"以列的形式传入,计算某列的缺失值占比:\n{df.apply(prop_missing)}")
print(f"以列的形式传入,计算某列的非缺失值占比:\n{df.apply(prop_complete)}")# 默认:axis=1, 即:以行的方式传入的
print(f"以行的形式传入,计算某行的缺失值个数:\n{df.apply(count_missing, axis=1)}") # 计算的是所有的列,没有指定某个列,所有列中缺失值的数量
print(f"以行的形式传入,计算某列的缺失值占比:\n{df.apply(prop_missing, axis=1)}")
print(f"以行的形式传入,计算某列的非缺失值占比:\n{df.apply(prop_complete, axis=1)}")

计算某列的缺失值个数:PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

计算某列的缺失值占比:PassengerId    0.000000
Survived       0.000000
Pclass         0.000000
Name           0.000000
Sex            0.000000
Age            0.198653
SibSp          0.000000
Parch          0.000000
Ticket         0.000000
Fare           0.000000
Cabin          0.771044

Embarked       0.002245
dtype: float64
计算某列的非缺失值占比:PassengerId    1.000000
Survived       1.000000
Pclass         1.000000
Name           1.000000
Sex            1.000000
Age            0.801347
SibSp          1.000000
Parch          1.000000
Ticket         1.000000
Fare           1.000000
Cabin          0.228956
Embarked       0.997755
dtype: float64

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何有效利用大语言模型来智能加速产业联盟的产业链转化路径?

观点作者&#xff1a;科易网AI技术转移研究院在科技创新浪潮席卷全球的今天&#xff0c;科技成果转化已成为衡量一个国家创新能力的重要标志。然而&#xff0c;一项权威调查显示&#xff0c;我国科技成果转化率不足30%&#xff0c;大量有价值的创新成果仍停留在实验室阶段&…

视频加水印 视频加水印软件 视频加动态水印

如果你有一个视频&#xff0c;你想给他加一个水印&#xff0c;那么你可以使用这个工具&#xff0c;准备好你的视频和水印。水印一般采用PNG&#xff0c;打开这个工具&#xff0c;把你的视频和水印拖进这个方框当中。视频限制是MP4&#xff0c;水印限制是PNG&#xff0c;它可以把…

面向DeepSeek chat coding实录(二)

向DeepSeek的提问 帮我设计以下两个python class Span 属性&#xff1a; hash值&#xff08;在init函数中通过时间初始化&#xff09; 创建时间&#xff1a;时间&#xff08;在init函数中通过时间初始化&#xff09; 结束时间&#xff1a;时间&#xff08;可选&#xff0c;默认…

Hi3516CV610-00S 海思SOC芯片 可申请开发资料

1.1 概述Hi3516CV610 是一颗应用在安防市场的 IPC SoC。在开放操作系统、新一代视频编解码标准、网络安全和隐私保护、人工智能方面引领行业发展&#xff0c;主要面向室内外场景下的枪机、球机、半球机、海螺机、枪球一体机、双目长短焦机等产品形态&#xff0c;打造极具竞争力…

算法题Day4

目录 13. 练习13 : 整数十位 14. 练习14 : 时间转换 15. 练习15 : 小雨的游泳时间 13. 练习13 : 整数十位 解题方法: #include <iostream> using namespace std; int a; int main() {cin >> a;cout << a % 100 / 10 << endl;return 0; } 14. 练习…

加速你的故障排查:使用 Elasticsearch 构建家电手册的 RAG 应用

作者&#xff1a;来自 Elastic Alessandro Brofferio 学习如何使用 Elasticsearch 构建 RAG 应用&#xff0c;轻松排查你的家电问题。 想要获得 Elastic 认证吗&#xff1f;来看看下一次 Elasticsearch 工程师培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&am…

6.Shell脚本修炼手册---grep命令使用指南

grep 命令&#xff1a;从文本中精准筛选信息的实用指南 文章目录grep 命令&#xff1a;从文本中精准筛选信息的实用指南一、什么是 grep&#xff1f;为什么要用它&#xff1f;二、grep 基本语法三、常用选项详解&#xff08;附实例&#xff09;&#xff08;一&#xff09;模式选…

Python day51

浙大疏锦行 Python day51 复习日&#xff0c;DDPM class DenoiseDiffusion():def __init__(self, eps_model: nn.Module, n_steps: int, device: torch.device):super().__init__()self.eps_model eps_modelself.n_steps n_stepsself.device deviceself.beta torch.linsp…

数据结构:生成 (Generating) 一棵 AVL 树

目录 搭建“创世”的舞台 注入序列&#xff0c;观察演化 注入 10 注入 20 注入 30 注入 40 注入 50 注入 25 再次审视 上一讲&#xff0c;我们已经从最根本的逻辑出发&#xff0c;推导出了 AVL 树失衡时所必需的修复操作——旋转 (Rotation)。 现在&#xff0c;我们将…

github 上传代码步骤

登录GitHub → 点击右上角 ​​ → New Repository​​。填写仓库名称&#xff08;建议与本地项目同名&#xff09;&#xff0c;选择 ​​Public/Private​​。​​关键&#xff1a;不要勾选​​ “Initialize with README”&#xff08;避免与本地仓库冲突&#xff09;。点击 …

陪诊小程序系统开发:开启智慧就医新时代

在数字化浪潮的推动下&#xff0c;智慧医疗正逐渐成为现实。陪诊小程序系统的开发&#xff0c;作为智慧医疗领域的一次重要创新&#xff0c;正以其独特的魅力与优势&#xff0c;引领着就医新时代的到来。它不仅改变了传统就医模式&#xff0c;更以科技的力量&#xff0c;让医疗…

朝花夕拾(七)--------从混淆矩阵到分类报告全面解析​

目录 ​​机器学习模型评估指南&#xff1a;从混淆矩阵到分类报告全面解析​​ ​​1. 引言​​ ​​2. 混淆矩阵&#xff1a;模型评估的基石​​ ​​2.1 什么是混淆矩阵&#xff1f;​​ 2.2二分类问题的混淆矩阵 ​​二分类场景下的具体案例​ ​分析案例: 1.​​案例…

Python读取和设置PNG图片的像素值

在Python中&#xff0c;可以使用Pillow库或OpenCV库来读取和写入PNG图片的像素值。以下是两种方法的详细说明&#xff1a;1. 使用Pillow库Pillow是Python中常用的图像处理库&#xff0c;支持多种图像格式&#xff0c;包括PNG。读取像素值from PIL import Imageimg Image.open(…

SkyWalking + Elasticsearch8 容器化部署指南:国内镜像加速与生产级调优

SkyWalking Elasticsearch8 Docker 部署文档本文提供在 Ubuntu 服务器上&#xff0c;使用 Docker Compose 部署 SkyWalking&#xff08;OAPUI&#xff09;与 Elasticsearch 8 的完整步骤&#xff0c;数据/日志落地到 /media/disk2 前置条件 Ubuntu&#xff0c;已具备 sudo 权限…

有符号和无符号的区别

有符号&#xff08;Signed&#xff09;和无符号&#xff08;Unsigned&#xff09;是计算机编程中用来描述整数数据类型能否表示负数的两个概念。它们的主要区别在于能否表示负数以及数值的表示范围。以下是它们的核心区别&#xff1a;1. 能否表示负数有符号&#xff08;Signed&…

8月21日作业

1、Makefile中头文件发生过修改的解决&#xff1a; 处插入*.h依赖&#xff0c;对.h文件打的时间戳进行检查2、头删和输出//五、头删 void delete_head(seq_p s) {empty(s);for(int i1;i<s->len;i){s->data[i-1]s->data[i];}s->len--; }//六、输出 void output(s…

Lucene 8.5.0 的 `.pos` 文件**逻辑结构**

Lucene 8.5.0 的 .pos 文件**逻辑结构**&#xff08;按真实实现重新整理&#xff09; .pos 文件 ├─ Header (CodecHeader) ├─ TermPositions TermCount ← 每个 term 一段&#xff0c;顺序由词典隐式决定 │ ├─ PackedPosDeltaBlock N ← 仅当 **无 payl…

基于Matlab多技术融合的红外图像增强方法研究

红外图像在低照度、强干扰和复杂环境下具有较强的成像能力&#xff0c;但受传感器噪声、成像条件及大气衰减等因素影响&#xff0c;原始红外图像往往存在对比度低、细节模糊及光照不均等问题。本文针对红外图像质量退化的特点&#xff0c;提出了一种基于多算法融合的红外图像增…

【时时三省】集成测试 简介

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,集成测试含义 2,集成测试 验证方法 3,集成测试 用例设计方法 4,集成测试输出物 5,集成测试注意点 1,集成测试含义 单元测试在以V模型的流程中,对应的是架构设计阶段。在 单元测试 和 架构设计…

leetcode 76 最小覆盖子串

一、题目描述二、解题思路整体思路&#xff1a;模拟寻找最小覆盖子集的过程&#xff0c;由于可借助同向双指针且可以做到指针不回退&#xff0c;所以可以用滑动窗口的思想来解决这个问题。具体思路&#xff1a;(1)数组hash1用于统计t中每一个字符出现的频次&#xff0c;变量kin…