当前位置: 首页 > news >正文

pandas和polars简单的对比分析

pandas

pandas是基于python写的,底层的数据结构是Numpy数据(ndarray)。pandas自身有两个核心的数据结构:DataFrame和Series,前者是二维的表格数据结构,后者是一维标签化数组。

polars

polars是用Rust(一种系统级编程语言,具有非常好的并发性和性能)写的,支持Python、Rust和NodeJS。主要特性有:

  1. 快:Polars从零开始,没有任何扩展依赖,底层设计(import速度非常快)。
  2. I/O:完美支持常见的数据存储层:本地、云存储、数据库。
  3. 使用简单:使用它的内置操作,Polars内部决定使用最有效的方法执行。
  4. 核外:Polars支持使用它的streaming API操作核外数据转化。基于磁盘的内存映射技术,大数据下允许数据在磁盘和内存之间进行高效的交换。可以处理比机器可用RAM更大的数据集
  5. 并行:Polars在不增加额外配置事,会充分利用机器可利用的cpu(可利用的所有核)。
  6. 矢量查询引擎:Polars使用Apache Arrow(一种列式数据格式,Arrow内存格式支持零拷贝读取,以实现闪电般快速的数据访问,而无需序列化开销)。以矢量的方式处理queries。它使用SIMD(单指令多数据,一种并行处理方式)优化CPU的利用。

pandas vs polars

  1. 性能:pandas提供了强大的数据分析功能,对处理小数据集更方便。polars利用多线程和内存映射技术,具有更快的速度,适合处理大型数据集。

  2. 内存使用:Pandas在加载数据时需要将其完全读入内存;polars支持streaming API操作核外数据转化,可以在处理大型数据集时降低内存使用,从而减少了内存限制。

  3. 数据操作:pandas具有丰富的数据操作和处理方法,使用DataFrame进行数据清洗、转换、分组、聚合等操作;Polars提供了类似于SQL的查询操作,使得对数据进行筛选、转换和聚合更加直观。

  4. 生态系统:pandas已经非常成熟,具有大量的学习文档、教程和扩展库;polars相对较新,对应的文档、教程等资源较少。

  5. 适用场景:pandas更适用于中小型数据集的数据分析和处理;polars更适用于大型数据集或追求更高性能的数据分析和处理场景。

运行时间对比

数据读取

# train.parquet: 2.35G
%time train_pd=pd.read_parquet('/Users/Downloads/archive/train.parquet') #Pandas dataframe 
%time train_pl=pl.read_parquet('/Users/Downloads/archive/train.parquet') #Polars dataframe

CPU times: user 3.85 s, sys: 8.69 s, total: 12.5 s
Wall time: 10.4 s
CPU times: user 3.07 s, sys: 2.22 s, total: 5.29 s
Wall time: 3.39 s

聚合操作

%%time
# pandas query 
nums = ["num_7", "num_8", "num_9", "num_10", "num_11", "num_12", "num_13", "num_14", "num_15"]
cats = ["cat_1", "cat_2", "cat_3", "cat_4", "cat_5", "cat_6"]
train_pd[nums].agg(['min','max','mean','median','std']) %%time
# Polars query 
train_pl.with_columns([ pl.col(nums).min().suffix('_min'), pl.col(nums).max().suffix('_max'), pl.col(nums).mean().suffix('_mean'), pl.col(nums).median().suffix('_median'), pl.col(nums).std().suffix('_std'), 
])

CPU times: user 6.06 s, sys: 4.19 s, total: 10.3 s
Wall time: 15.8 s
CPU times: user 4.51 s, sys: 5.49 s, total: 10 s
Wall time: 8.09 s

查询后计算

# Pandas filter and select 
%time train_pd[train_pd['cat_1']==1][nums].mean()
# Polars filter and select 
%time train_pl.filter(pl.col("cat_1") == 1).select(pl.col(nums).mean()) 

CPU times: user 730 ms, sys: 1.65 s, total: 2.38 s
Wall time: 4.24 s
CPU times: user 659 ms, sys: 3.22 s, total: 3.88 s
Wall time: 2.12 s

分类再聚合

%time Function_3= train_pd.groupby(['user'])[nums].agg('mean')
%time Function_3 = train_pl.groupby('user').agg(pl.col(nums).mean())

CPU times: user 2.4 s, sys: 938 ms, total: 3.33 s
Wall time: 3.46 s
CPU times: user 6.92 s, sys: 2.68 s, total: 9.6 s
Wall time: 1.78 s

分组的列逐渐增加

# PANDAS: TESTING GROUPING SPEED ON 5 COLUMNS 
cols = []
for cat in ['user', 'cat_1', 'cat_2', 'cat_3', 'cat_4']:cols+=[cat] st=time.time() temp=train_pd.groupby(cols)['num_7'].agg('mean') en=time.time() print(f"{cat}:{round(en-st, 4)}s") # POLARS: TESTING GROUPING SPEED ON 5 COLUMNS 
cols = []
for cat in ['user', 'cat_1', 'cat_2', 'cat_3', 'cat_4']: cols+=[cat] st=time.time() temp=train_pl.groupby(cols).agg(pl.col('num_7').mean()) en=time.time() print(f"{cat}:{round(en-st, 4)}s") 

每增加一列进行groupby后计算,所需要的时间:

cols耗时
[“user”]0.7666s
[“user”,“cat_1”]1.8221s
[“user”,“cat_1”,“cat_2”]9.4581s
[“user”,“cat_1”,“cat_2”,“cat_3”]15.1409s
[“user”,“cat_1”,“cat_2”,“cat_3”,“cat_4”]16.5913s
cols耗时
[“user”]0.498s
[“user”,“cat_1”]1.1978s
[“user”,“cat_1”,“cat_2”]3.4107s
[“user”,“cat_1”,“cat_2”,“cat_3”]4.4749s
[“user”,“cat_1”,“cat_2”,“cat_3”,“cat_4”]4.6821s

排序

cols=['user','num_8'] # columns to be used for sorting 
# Sorting in Pandas 
%time a = train_pd.sort_values(by=cols,ascending=True)
#Sorting in Polars 
%time b = train_pl.sort(cols,descending=False) 

CPU times: user 31.9 s, sys: 7.28 s, total: 39.2 s
Wall time: 46.2 s
CPU times: user 32.2 s, sys: 7.04 s, total: 39.2 s
Wall time: 11.6 s

相关文章:

pandas和polars简单的对比分析

pandas pandas是基于python写的,底层的数据结构是Numpy数据(ndarray)。pandas自身有两个核心的数据结构:DataFrame和Series,前者是二维的表格数据结构,后者是一维标签化数组。 polars polars是用Rust(一种系统级编程…...

Feign远程调用的使用

假设已配好nacos服务:并且已配好userservice、orderservice,点击跳转 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign,其作用就是在程序中帮助我们优雅的实现http请求的发送&#xff0c…...

Postman API测试之道:不止于点击,更在于策略

引言:API测试的重要性 在当今的软件开发中,API已经成为了一个不可或缺的部分。它们是软件组件之间交互的桥梁,确保数据的流动和功能的实现。因此,对API的测试显得尤为重要,它不仅关乎功能的正确性,还涉及到…...

5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT

导读:原文《5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容, 喜…...

Golang Gorm 一对多的添加

一对多的添加有两种情况: 一种是添加用户的时候同时创建文章其次是创建文章关联已经存在的用户。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )// User 用户表 一个用户拥有多篇文章 type User struct {ID int64Name …...

图像扭曲之锯齿

源码: void wave_sawtooth(cv::Mat& src,cv::Mat& dst,double amplitude,double wavelength) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);double xAmplitude amplitude;double yAmplitude amplitude;int xWavelength wavelength;int yWave…...

【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效。便于实现"强一致性"这个特性。此特性对于机器学习与大数据处理非…...

构建个人博客_Obsidian_github.io_hexo

1 初衷 很早就开始分享文档,以技术类的为主,一开始是 MSN,博客,随着平台的更替,后来又用了 CSDN,知乎,简书…… 再后来是 Obsidian,飞书,Notion,常常有以下困…...

烟花厂人员作业释放静电行为检测算法

烟花厂人员作业释放静电行为检测算法通过pythonyolo系列算法模型框架,烟花厂人员作业释放静电行为检测算法在工厂车间入口处能够及时捕捉到人员是否触摸静电释放仪。一旦检测到人员进入时没有触摸静电释放仪,系统将自动触发告警。Python是一种由Guido va…...

ARTS挑战第二周-T:PHP数组相关操作

array_combine() 函数 合并两个数组 array_combine()传入2个参数,使用方法如下 array_combine(array $keys, array $values): array 返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。 array_key_exists() 函…...

【如何对公司网络进行限速?一个案例详解】

有不少朋友问到了关于企业网络QoS配置,这个确实在实际网络应用中非常多,基本上大部分企业或个人都用到这个功能,本期我们详细了解下QoS如何对宽带进行限制,QoS如何企业中应用。 一、什么是QoS? Qos是用来解决网络延迟和阻塞等问…...

服务器安全-修改默认ssh端口

防火墙先打开指定端口,要不修改后连不上(端口需要在65535之内) firewall-cmd --list-ports firewall-cmd --add-port54111/tcp --permanent firewall-cmd --reload-------------------- 先让两个端口同时存在,等配置成功后关闭22端口 vim /etc/ssh/sshd_config重启sshd service…...

保护隐私的第一步:从更新浏览器开始

当今社会已经进入了数字化和网络化的时代,而网络安全问题也日益突显。随着互联网在我们生活中的不断渗透,网络威胁变得愈发普遍和隐蔽。在这样的背景下,网络浏览器作为人们访问互联网的主要工具之一,不仅为我们提供了便捷的上网方…...

Python爬虫框架之快速抓取互联网数据详解

概要 Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代,信息爆炸式增长,人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务,它可以帮助我们快速地从互联网上抓取各种数据&#xf…...

【算法专题突破】双指针 - 盛最多水的容器(4)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:11. 盛最多水的容器 - 力扣(Leetcode) 这道题目也不难理解, 两边的柱子的盛水量是根据短的那边的柱子决定的, 而盛水量…...

循环神经网络(RNN) | 项目还不成熟 |还在初级阶段

一,定义 循环神经网络(Recurrent Neural Network,RNN)是一种深度学习神经网络架构,专门设计用于处理序列数据,如时间序列数据、自然语言文本等(一般用来解决序列问题)。 因为它们具…...

【Spring Boot】数据库持久层框架MyBatis — MyBatis简介

MyBatis简介 本节首先会介绍什么是ORM、什么是MyBatis、MyBatis的特点以及核心概念,最后介绍MyBatis是如何启动、如何加载配置文件的? 1.什么是ORM ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象…...

K8S Nginx Ingress实现金丝雀发布

通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。 需给服务创建2个 Ingress,其中1个常规 Ingress,另1个为带 nginx.ingress.kubernetes.io/canary: "true" 固定的 annotation 的 Ingress,称为 Cana…...

【C++入门】new和delete(C/C++内存管理)

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数5.new和delete的实现原理5.1内置类型5.2自定义类型 6.malloc/free和new/delete的区别7.定位new表达式(了解…...

C++设计模式之桥接模式

文章目录 一、桥接模式二、std::error_code与设计模式(桥接模式)参考 一、桥接模式 在C中,桥接模式通常涉及以下几个角色: 抽象类接口(Abstraction):定义抽象部分的接口,并维护一个…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...