”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Polars 与 Pandas Python 数据帧的新时代?

Polars 与 Pandas Python 数据帧的新时代?

发布于2024-11-08
浏览:405

Polars vs. Pandas A New Era of Dataframes in Python ?

北极熊与熊猫:有什么区别?

如果您一直关注 Python 的最新发展,您可能听说过 Polars,一个用于处理数据的新库。虽然 pandas 长期以来一直是首选库,但 Polars 正在掀起波澜,尤其是在处理大型数据集方面。那么,Polars 有什么大不了的呢?它和熊猫有什么不同?让我们来分解一下。


什么是极地?

Polars 是一个使用 Rust(一种快速的现代编程语言)构建的免费开源库。它旨在帮助 Python 开发人员以更快、更高效的方式处理数据。将其视为 pandas 的替代方案,当您处理 pandas 可能难以处理的非常大的数据集时,它会表现出色。


为什么要创建极地?

Pandas 已经存在很多年了,许多人仍然喜欢使用它。但随着数据变得越来越大、越来越复杂,pandas 开始表现出一些弱点。 Polars 的创建者 Ritchie Vink 注意到了这些问题,并决定创造一些更快、更高效的东西。甚至 Wes McKinney,pandas 的创建者,也在一篇题为 “我讨厌 pandas 的 10 件事” 的博客文章中承认,pandas 可以进行一些改进,特别是对于大型数据集。

这就是 Polars 的用武之地,它的设计速度快且内存效率高,这是 pandas 在处理大数据时遇到的两个问题。


主要区别:北极熊与熊猫

1. 速度

Polars 速度非常快。事实上,一些基准测试表明,在执行过滤或分组数据等常见操作时,Polars 的速度比 pandas 快 5-10 倍。当您处理大型数据集时,这种速度差异尤其明显。

2. 内存使用情况

Polars 在记忆方面效率更高。它使用的内存比 pandas 少 5 到 10 倍,这意味着您可以处理更大的数据集而不会遇到内存问题。

3. 延迟执行

Polars 使用称为延迟执行的东西,这意味着它不会在您编写操作时立即运行每个操作。相反,它会等到您编写了一系列操作,然后立即运行它们。这有助于它优化并更快地运行。另一方面,Pandas 会立即运行每个操作,这对于大型任务来说可能会更慢。

4. 多线程

Polars 可以同时使用多个 CPU 核心来处理数据,这使得处理大数据集的速度更快。 Pandas 大多是单线程的,这意味着它一次只能使用一个 CPU 核心,这会减慢速度,尤其是在处理大型数据集时。


为什么 Polar 如此快?

Polars 速度快有几个原因:

  • 它内置于 Rust,这是一种以其速度和安全性而闻名的编程语言,使其超级高效。
  • 它使用Apache Arrow,这是一种在内存中存储数据的特殊方式,可以更轻松、更快速地跨不同编程语言使用。

Rust 和 Apache Arrow 的这种组合使 Polars 在速度和内存使用方面比 pandas 更具优势。


Pandas 的优点和局限性

虽然 Polars 非常适合大数据,但 pandas 仍然占有一席之地。 Pandas 非常适合中小型数据集,并且已经存在很长时间了,它拥有大量的功能和庞大的社区。因此,如果您不使用庞大的数据集,pandas 可能仍然是您的最佳选择。

但是,随着数据集变大,pandas 往往会使用更多内存并且速度变慢,这使得 Polars 在这些情况下成为更好的选择。


什么时候应该使用 Polar?

如果出现以下情况,您应该考虑使用 Polars:

  • 您正在使用大型数据集(数百万或数十亿行)。
  • 您需要速度和性能才能快速完成任务。
  • 您有内存限制并且需要节省您正在使用的 RAM 量。

结论

北极熊和熊猫都有各自的优点。如果您正在处理中小型数据集,pandas 仍然是一个很棒的工具。但如果您正在处理大型数据集并且需要更快、更高效的内存效率,Polars 绝对值得尝试。得益于 Rust 和 Apache Arrow,其性能得到提升,使其成为数据密集型任务的绝佳选择。

随着 Python 的不断发展,Polars 可能会成为处理大数据的新的首选工具。

编码愉快? ?

版本声明 本文转载于:https://dev.to/aashwinkumar/polars-vs-pandas-a-new-era-of-dataframes-in-python--1654?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-05-09
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-05-09
  • 在Pandas中如何将年份和季度列合并为一个周期列?
    在Pandas中如何将年份和季度列合并为一个周期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 这个目标是通过组合“年度”和“季度”列来创建一个新列,以获取以下结果: [python中的concate...
    编程 发布于2025-05-09
  • 在Java中如何为PNG文件添加坐标轴和标签?
    在Java中如何为PNG文件添加坐标轴和标签?
    如何用java 在现有png映像中添加轴和标签的axes和labels如何注释png文件可能具有挑战性。与其尝试可能导致错误和不一致的修改,不如建议在图表创建过程中集成注释。使用JFReechArt import java.awt.color; 导入java.awt.eventqueue; 导入...
    编程 发布于2025-05-09
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-05-09
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-09
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-05-09
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-09
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-05-09
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。为了解决此问题,您正在尝试使用“ mb_convert_encoding”和“ iconv”转换受...
    编程 发布于2025-05-09
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-05-09
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-05-09
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-05-09
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-05-09
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用了Futex System Call...
    编程 发布于2025-05-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3