python 连续比较_【Python效率】五种Pandas循环方法效率对比

2023-11-15

本专栏招募作者及编辑,感兴趣分享学习R/Python数据分析/机器学习知识的可以私信联系

PS:有人提到一个问题很好,如果每次循环都采用比较复杂的操作似乎用向量化很难实现,我的建议是尽可能拆分成向量化操作,如果不行建议用numpy硬写然后用numba包加速。

正文:

如果你使用过Python及Pandas,那么你很有可能已经使用了for循环去进行某些数据分析操作。不幸的是,绝大部分Python新手使用的下标循环语句实际上是非常之慢的,即便在小数据集上也会消耗大量的运行时间。本专栏之前的一些文章已经涉及了这方面的讨论,在这篇文章中文兄进一步特意对五种不同的For Loop方法进行横向对比,使大家更加明晰自己平时写的各种For循环到底效率几何。

注意:之后代码里出现的df是一个只有一个column叫做test的dataframe。另外各方法下面的代码均只是用法举例,并不和测试速度用的代码完全一致。测试代码原文如下:https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06​towardsdatascience.com

方法1:下标循环(速度等级: )

df1 = df

for i in range(len(df)):

if df.iloc[i]['test'] != 1:

df1.iloc[i]['test'] = 0

下标循环是通过循环一个下标数列,通过iloc去不断get数据,这个方法是新手最常用的但也是最慢的,在测试例子中大概需要21.9s。

方法2:Iterrows循环 (速度等级: )

i = 0

for ind, row in df.iterrows():

if row['test'] != 1:

df1.iloc[i]['test'] = 0

i += 1

该循环方式是通过iterrows进行循环,ind和row分别代表了每一行的index和内容。测试例子大概需要0.07s,比起下标循环速度提升了321倍。

方法3:Apply循环(速度等级: )

df1['test'] = df['test'].apply(lambda x: x if x == 1 else 0)

Apply是pandas的一个常用函数,通常的用法是内接一个lambda匿名函数,从而对dataframe的每一行都进行循环处理。在测试例子中,apply的速度为0.027s,比下标循环快了811倍。

方法4:Pandas内置向量化函数(速度等级: )

res = df.sum()

Pandas为我们提供了大量的内置向量化函数,比如sum,mean就可以快速计算某一列的求和和平均。在测试例子中速度为0.00236s,比下标循环快了9280倍。

方法5:Numpy向量化函数(速度等级: )

df_values = df.values

res = np.sum(df_values)

最后一种方法是将Pandas的数据转化为Numpy的Array,然后使用Numpy的内置函数进行向量化操作。在测试例子中速度为0.000305s,比下标循环快了71800倍。

下面是详细的速度对比图,来自之前链接:

Sources:

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

python 连续比较_【Python效率】五种Pandas循环方法效率对比 的相关文章

  • 线性表 :顺序表(ArrayList) 和 单链表(LinkedList) 详解

    线性表 1 顺序表 2 单链表 单向 不带头 非循环链表 3 顺序表和链表的区别 面试 线性表 List 是n个具有 相同特性 的数据元素的 有限序列 线性表是一种在实际中广泛使用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线
  • mac系统渗透测试小技巧-将命令行工具能够tab补全

    在kali中各种工具都能补全 但在mac中我们有些工具是需要自己下载回来的 每次使用工具都需要进入目录再打开命令行 这样会影响我们渗透测试的速度 说起来就是懒 懒人自有懒方法 其实很简单 我们只需要添加一个软连接到 usr local bi
  • 人工智能学习线路图

    人工智能学习线路图 Python教程 Python 教程 Python 简介 Python 环境搭建 Python 中文编码 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循环语
  • SpringCloud Gateway 在微服务架构下的最佳实践

    前言 本文整理自云原生技术实践营广州站 Meetup 的分享 其中的经验来自于我们团队开发的阿里云 CSB 2 0 这款产品 其基于开源 SpringCloud Gateway 开发 在完全兼容开源用法的前提下 做了诸多企业级的改造 涉及功
  • 从信号处理认识傅里叶变换

    前言 在表示和分析线性时不变系统时 我们的基本方法是将系统输入分解成基本信号的线性组合 其响应是基本输入响应的相同线性组合 卷积和和卷积积分源于我们将输入信号分解成基本信号的一种特定选择 特别是延迟的单位脉冲 这种选择的优点在于 对于线性时
  • 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分

    n是换行 英文是New line r是回车 英文是Carriage return r 是回车 前者使光标到行首 carriage return n 是换行 后者使光标下移一行 line feed r 是回车 return n 是换行 new
  • 将COLMAP中生成的images.txt结果可视化

    instant ngp中执行scripts colmap2nerf py时 在colmap text目录下会生成images txt文件 此文件中每两行定义一幅图像的信息 IMAGE ID QW QX QY QZ TX TY TZ CAME
  • HTTP协议和HTTPS协议的区别

    HTTP协议和HTTPS协议的区别 1 HTTP协议传输的数据都是未加密的 也就是明文的 使用HTTP协议传输隐私信息不安全 2 HTTPS协议是由SSL 安全套接层 为网络通信提供安全及数据完整性的一种安全协议 和HTTP协议构建的 是一
  • Nacos启动异常

    可能原因一 集群切换单机 startup m standalone 可能原因二 derby data文件夹内文件解析失败 解决方案 删了derby data文件夹重启就行 报错信息 供网友搜索 2021 08 11 13 11 37 550
  • Fish Redux系列学习之认识view、action

    继续上一篇文章 Fish Redux系列学习之新建page以及认识state 如上图 现在我们学习的是buildview这个组件 说白了 buildView是我们写页面的地方 跟写普通flutter的page页面一样 我们将页面都写在这里面
  • Date互转String和时间戳

    Date转字符串 private static String convertDateToStr Date date String pattrn if date null return StringUtils EMPTY Instant in
  • 数据类型 -- uint32_t 类型

    整型的每一种都有无符号 unsigned 和有符号 signed 两种类型 float和double总是带符号的 在默认情况下声明的整型变量都是有符号的类型 char有点特别 如果需声明无符号类型的话就需要在类型前加上unsigned 无符
  • QT5 动态链接库的创建和使用(QT自己做动态库给自己使用)

    记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1 创建动态链接库 先新建一个库项目 选择chose进入下一下页面 类型选择共享库 输入一个名称 我输入的是sld 再点击下一步到 如果这里我们需要QtGui所以也勾选
  • osgEarth的Rex引擎原理分析(一一五)tif文件分辨率的计算

    目标 一一四 中的问题202 maxX为右经度 minX为左经度 maxY为上纬度 minY为下纬度 double resolutionX maxX minX double warpedDS gt GetRasterXSize double
  • cuBLAS的使用

    cuBLAS包含了三部分 cuBLAS API 从cuda6 0开始 CUBLASXT API 从cuda6 0开始 cuBLASLt API 从cuda10 1开始 想要使用cuBLAS API 必须按照以下步骤 在GPU端建立矩阵或向量
  • 资源有限的大型语言模型的全参数微调

    文章目录 摘要 1 简介 2 相关工作 3 方法 3 1 重新思考optimizer的功能 3 1 1 使用SGD 3 1 2 隐式BatchSize 3 2 LOMO 低内存优化 3 3 使用LOMO稳定训练 3 3 1 梯度归一化和裁剪
  • android layout 界面开发,Android开发之CoordinatorLayout使用详解一

    官网描述为 CoordinatorLayout是一个增强版的FrameLayout 继承自ViewGroup 用途 1 作为应用的顶层视图 2 作为一个可以指定子View之间相互作用的容器 通过给CoordinatorLayout的子Vie
  • 协程框架的堆栈大小陷阱

    昨晚和同事联调我们的开放平台 由于基于协程框架的网关服务器总是在接受两个消息后发生段错误 Core Dump掉 让我们百思不得其解 查看Dump文件 没有任何有效的调试信息 gdb设置断点调试 程序总是在接受到第二条消息之前 没到断点就崩溃

随机推荐

  • Qt连接Oracle数据库详细介绍(QOCI)

    Qt连接Oracle数据库详细介绍 1 前提条件 1 本地安装了Oracle数据库或者oracle instant client 2 已编译成功所需要的lib文件QOCI lib 这部分等我稍后补上 2 实现代码 1 包含lib文件 QtS
  • vue电商项目(三)——开发search页面

    目录 一 页面分析 二 获取数据到组件 1 获取数据 2 通过仓库getter简化数据 3 根据参数返回数据 1 将请求封装成一个方法 2 准备一个响应式数据 4 在发送请求之前准备好数据 三 渲染组件内容 1 完成子组件searchSel
  • 做一个FSK的收发试验 之一

    这里使用我们之前写好的简易的DDS模块 我们先回顾一下用到的这个my dds模块 my dds my dds clk rst clr cnt step sin cos module my dds input clk rst clr inpu
  • element 树型结构表格的合并问题

    完成以上的树型结果的表格 需要掌握以下几点 首先 我们先看比较简单 总价单元格的合并的问题 这里总价是合并了两列 他实际上其实就是用到element 中的show summary 同时定义了table中的refs 实际上就是获取到了表格的元
  • apifox图片验证码显示

    添加后置脚本 脚本内容如下 var resp response pm response json let img resp response data let template img src img pm visualizer set t
  • vue中如果解决列表删除最后一页暂无数据bug

    bug 当删除数据的时候 页码变了但是数据没有变化 页面显示暂无数据 是因为你删除了当前的数据之后瞬间发了一个请求 异步请求请求刷新列表 列表刷新的时候需要传一个当前页 这里的当前页没有改变还是之前的当前页导致数据没有变 解决 就是当前页减
  • 【css】css自定义div的滚动条宽度

    需要通过对应浏览器的伪元素来修改 点击这里查看 主流浏览器对应伪元素简介链接地址 示例代码 针对google类webkit内核浏览器 div class scrollDiv div scrollDiv max height 300px ov
  • apt-get自动补全

    sudo apt get install bash completion source etc bash completion
  • 房屋价格预测

    机器学习 房屋价格预测 点击链接查看文档代码 一 项目概述及计划 项目背景 影响房屋价格的因素众多 如房屋面积 房屋层数 配套设施等等 项目要求 利用竞赛提供的数据 通过分析影响房屋价格的诸多因素来对房屋价格进行预测 项目数据 项目数据分成
  • 男子英文名释义

    AARON 希伯来 启发的意思 AARON被描绘为不高但英俊的男人 诚实刻苦具有责任感 是个有效率个性沉静的领导者 ABEL 希伯来 呼吸 的意思 为ABELARD的简写 大部份的人认为ABEL是高大 强壮的运动员 能干 独立 又聪明 有些
  • 32 Consumer消息零丢失方案:手动提交offset + 自动故障转移

    1 消费者 红包系统 丢失消息的问题 前面两章中 阐述了如何确保订单系统发送出去的消息一定会到达MQ中 而且也能确保了如果消息到达了MQ如何确保一定不会丢失 在整个消息的生产消费中 就剩下消费者这一端的问题了 红包系统 消费者 拿到消息后
  • jshint 一些选项(转载)

    内容来自 http www cnblogs com qianduanjingying p 6185793 html 一些变量的作用 http www cnblogs com CloudMu archive 2014 05 28 375753
  • 使用Matlab相机标定库(Camera Calibration Toolbox)问题小记

    使用Matlab相机标定库 Camera Calibration Toolbox 问题小记 Camera Calibration Toolbox的官方网站 http www vision caltech edu bouguetj calib
  • 佩服,主动让自己不舒服的人

    个人特别喜欢金庸的武侠 零度曾也梦想仗剑走天涯 奈何bug太多 最后就没去了 金庸武侠里面的主角有一个特点 主角都是从最底层开始并且开始条件不好 最后成功走向巅峰的 由于反差极大 也特别励志 现实中有没有那种开始条件不好 后来走向巅峰的呢
  • QListWidget 中的元素水平排列

    1 QListWidget 中元素的排列方式设置 m listWidget new QListWidget m listWidget gt insertItem 0 tr TCP 添加元素 m listWidget gt insertIte
  • 【Zblog建站】搭建属于自己的博客网站,并内网穿透实现公网访问

    文章目录 1 前言 2 Z blog网站搭建 2 1 XAMPP环境设置 2 2 Z blog安装 2 3 Z blog网页测试 2 4 Cpolar安装和注册 3 本地网页发布 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • HttpSession对象

    一 HttpSession描述 HttpSession是当一个用户第一次访问某个网站时自动创建的 通过在HttpServletRequest中调用getSession方法 可以获得用户的HttpSession 二 HttpSession对象
  • Java中的日期时间类详解(Date、DateFormat、Calendar)

    目录 1 Date类 1 1 概述 1 2 Date类构造方法 1 3 Date类的getTime方法 返回毫秒数 2 DateFormat类 2 1 其子类SimpleDateFormat的构造方法 2 2 DateFormat类常用方法
  • 【Unity实用小方法】开启游戏时播放一段动画

    不显示任何视频控件 当点击屏幕发生输入之后会跳过动画的播放 一般游戏中的开场动画使用这种播放方式 Handheld PlayFullScreenMovie test mp4 Color black FullScreenMovieContro
  • python 连续比较_【Python效率】五种Pandas循环方法效率对比

    本专栏招募作者及编辑 感兴趣分享学习R Python数据分析 机器学习知识的可以私信联系 PS 有人提到一个问题很好 如果每次循环都采用比较复杂的操作似乎用向量化很难实现 我的建议是尽可能拆分成向量化操作 如果不行建议用numpy硬写然后用