算法金 | 来了,pandas 2.0

news/2024/11/16 12:24:31/文章来源:https://www.cnblogs.com/suanfajin/p/18297378


大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」

今日 210+/10000,内含

Pandas 是一个强大的数据分析库,广泛应用于科学研究、金融分析、商业智能等领域。它提供了高效的数据结构和数据分析工具,使得处理和分析数据变得更加简单和高效。Pandas 的核心数据结构是 DataFrame,它可以方便地进行数据清洗、变换、合并和聚合操作,这使得 Pandas 成为数据科学家和分析师的必备工具。

  • 数据清洗:Pandas 提供了丰富的功能来处理缺失值、重复数据和数据类型转换。
  • 数据变换:可以轻松地对数据进行排序、过滤、分组和变换操作。
  • 数据合并:支持多种方式的数据合并和连接,如 merge、join 和 concat。
  • 数据聚合:通过 groupby 操作,可以对数据进行高效的聚合和汇总。

Pandas 的易用性和强大功能,使得它在数据分析中占据了重要地位。

Pandas 2.0 的发布背景和主要目标

随着数据量的不断增长和数据分析需求的增加,Pandas 的性能和功能也需要不断提升。Pandas 2.0 的发布背景主要包括以下几点:

  • 性能优化需求:大规模数据的处理对性能提出了更高的要求,Pandas 2.0 通过引入 Arrow Array 等技术,显著提升了数据处理的效率。
  • 统一的空值处理:在数据分析过程中,空值处理是一个常见且重要的问题。Pandas 2.0 引入了 pd.NA 统一表示空值,简化了空值处理的逻辑。
  • 类型提示的改进:为了提高代码的可读性和开发效率,Pandas 2.0 提供了更好的类型提示支持,帮助开发者进行类型检查和自动补全。
  • 扩展接口的需求:随着用户需求的多样化,Pandas 2.0 提供了更多的可扩展接口,使得开发者可以更方便地扩展和定制 Pandas 的功能。

Pandas 2.0 的主要目标是提升性能、增强数据处理能力和改进开发者体验,使得 Pandas 在处理大规模数据和复杂数据分析任务时更加高效和便捷。

Pandas 2.0 的新特性

2.1 Arrow Array

2.0 最大的亮点是增加了对pyarrow的支持,甚至被定义为一场革命(revolution)。

Apache Arrow 是一个用于内存中的跨平台数据表示格式,旨在提高数据处理的速度和效率。它通过定义一种列式内存格式,使数据在不同的计算引擎之间可以高效共享,减少数据的序列化和反序列化开销,从而提升性能。

Arrow 的主要特点包括:

  • 列式存储:数据按列存储,适合高效的压缩和向量化操作。
  • 跨平台兼容:支持多种编程语言和计算引擎,如 Python、R、Java、Spark 等。
  • 高性能:优化了内存访问模式,提高了数据处理的速度。

Arrow Array 的优点和使用场景

Pandas 2.0 引入了 Arrow Array 作为新的数据结构,带来了许多优点:

  • 高效的内存使用:Arrow Array 使用列式存储,减少了内存占用。
  • 快速的数据访问:优化的内存访问模式和向量化操作,提高了数据处理的速度。
  • 跨平台数据共享:可以在不同的计算引擎之间高效地共享数据,减少数据复制和转换的开销。

使用场景包括:

  • 大规模数据处理:在处理大量数据时,Arrow Array 提供了更高的性能和效率。
  • 数据分析和机器学习:需要高效的数据处理和内存管理的场景。
  • 跨平台数据处理:需要在不同计算引擎之间共享数据的应用。
import pandas as pd
import pyarrow as pa# 使用 Arrow Array 创建 DataFrame
data = pa.table({'column1': [1, 2, 3], 'column2': ['a', 'b', 'c']})
df = pd.DataFrame(data)
print(df)

2.2 改进的空值处理

统一的空值表示 pd.NA

Pandas 2.0 引入了 pd.NA 来统一表示空值,解决了过去不同数据类型空值表示不一致的问题。pd.NA 是一个新的标识符,用于表示缺失值,无论数据类型如何。

空值处理的最佳实践

使用 pd.NA 进行空值处理的一些最佳实践包括:

  • 统一表示空值:使用 pd.NA 统一表示所有数据类型的空值,简化空值处理逻辑。
  • 检查空值:使用 isna() 和 notna() 函数检查空值。
  • 处理空值:使用 fillna() 函数填充空值,或使用 dropna() 函数删除包含空值的行或列。
df = pd.DataFrame({'column1': [1, pd.NA, 3], 'column2': ['a', 'b', pd.NA]})
print(df)

2.3 性能提升

groupby 和 merge 操作的优化

Pandas 2.0 对 groupby 和 merge 操作进行了显著的性能优化,提升了大数据量处理的效率。

# 示例:更快的 groupby 操作
df = pd.DataFrame({'group': ['A', 'B', 'A', 'B'],'value': [10, 20, 30, 40]
})
grouped = df.groupby('group').sum()
print(grouped)

实际应用中的性能对比

通过实际应用中的性能对比测试,可以看到 Pandas 2.0 在处理大数据集时的显著性能提升。例如,在合并两个大数据集时,Pandas 2.0 的速度明显快于之前的版本。

2.4 改进的类型提示

类型提示的重要性

类型提示是提高代码可读性和开发效率的重要工具。它可以帮助开发者进行类型检查、自动补全和错误检测,减少代码中的潜在错误。

Pandas 2.0 对类型提示的支持

Pandas 2.0 提供了更好的类型提示支持,帮助开发者在编写代码时进行类型检查和自动补全。

from typing import Optional
import pandas as pddef process_data(df: pd.DataFrame) -> pd.DataFrame:# 进行数据处理return df

2.5 可扩展的接口

自定义聚合函数

Pandas 2.0 增加了许多可扩展的接口,使得开发者可以更容易地扩展 Pandas 的功能。例如,可以自定义聚合函数来进行数据聚合。

# 示例:自定义聚合函数
def custom_aggregation(series):return series.sum()df = pd.DataFrame({'group': ['A', 'B', 'A', 'B'],'value': [10, 20, 30, 40]
})
grouped = df.groupby('group').agg(custom_aggregation)
print(grouped)

扩展方法的实现和应用

Pandas 2.0 允许开发者通过注册扩展方法来扩展 DataFrame 和 Series 的功能。

# 示例:自定义扩展方法
@pd.api.extensions.register_dataframe_accessor("custom")
class CustomAccessor:def __init__(self, pandas_obj):self._obj = pandas_objdef custom_method(self):return self._obj.mean()df = pd.DataFrame({'column1': [1, 2, 3], 'column2': [4, 5, 6]})
print(df.custom.custom_method())

[ 抱个拳,总个结 ]

Pandas 2.0 的这些新特性和改进,显著提升了数据处理的性能和灵活性,使得 Pandas 在处理大规模数据和复杂数据分析任务时更加高效和便捷。

- 科研为国分忧,创新与民造福 -

日更时间紧任务急,难免有疏漏之处,还请大侠海涵内容仅供学习交流之用,部分素材来自网络,侵联删

[ 算法金,碎碎念 ]

全网同名,日更万日,让更多人享受智能乐趣

如果觉得内容有价值,烦请大侠多多 分享、在看、点赞,助力算法金又猛又持久、很黄很 BL 的日更下去;

同时邀请大侠 关注、星标 算法金,围观日更万日,助你功力大增、笑傲江湖

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

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

相关文章

给你安利一个程序员上岸公务员的开源项目

写在前面 也许你还在工位上焦虑着人工智能会不会替代自己 也许你还在为一眼看不到头的加班而苦恼 也许你还在为夜晚拉长了的背影而感到孤独无助。 那么今天推荐的这个开源项目或许值得你一看。 都说宇宙的尽头是考编,今天推荐的开源项目就是公务员从入门到上岸,最佳程序员公考…

WSL2连接USB设备(以USRP B210为例)

使用WSL2时,发现其无法直接识别到宿主机上插入的USB设备。 可利用USPIPD-WIN项目进行连接。 以下以USRP B210设备连接为例,展示连接过程: 安装USBIPD-WIN 项目 参考连接 USB 设备 | Microsoft Learn,我选择通过.msi文件安装:转到 usbipd-win 项目的最新发布页。 选择 .msi…

Simple WPF: S3实现MINIO大文件上传并显示上传进度

早两天写了一篇S3简单上传文件的小工具,知乎上看到了一个问题问如何实现显示MINIO上传进度,因此拓展一下这个小工具能够在上传大文件时显示进度。最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。 创作不易,如果觉得有用请在Github上为博主点亮一颗小星…

.NET 9 预览版6发布

微软发布了 .NET 9 的第 6 个预览版,此版本包括对运行时、SDK、.NET MAUI、ASP.NET Core 和 C# 的更新,预览版没有包含太多新的主要功能或特性,因为已接近 .NET 9 开发的最后阶段,该开发计划于 11 月全面发布。Loongarch的Native-AOT代码合进去了,龙芯.NET 可以直接同步社…

【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)

介绍一个简单的工具,用于将Redis数据从一个redis端点复制到另一个redis端点,基于原始存储库转换为.NET 8:https://github.com/LuBu0505/redis-copy-net8介绍一个简单的工具,用于将Redis数据从一个redis端点复制到另一个redis端点,基于原始存储库转换为.NET 8:https://git…

[Windows环境]nvm工具的介绍和安装

nvm工具介绍 NVM(Node Version Manager)是一个用于管理Node.js版本的工具。它允许用户在同一台机器上同时安装和切换不同版本的Node.js,以便在不同的项目中使用特定的Node.js版本。同时为每个版本保留独立的环境,避免版本冲突和兼容性问题。此文章步骤以windows为例使用set…

劫持TLS绕过canary 堆和栈的灵活转换

引入:什么是TLScanary? TLScanary 是一种在 Pwn(主要是二进制漏洞利用)中常见的技术,专门用于处理 TLS 保护的二进制文件。在安全竞赛(例如 CTF)和漏洞利用场景中,攻击者需要应对目标程序的多层安全机制,其中 TLS 是一种常见的保护措施。TLScanary 结合了 TLS 协议与堆…

松灵机器人scout mini小车 自主导航(3)——建图导航仿真

松灵机器人Scout mini小车建图导航仿真 在之前的文章中,我们已经介绍了如何在gazebo和rviz对scout mini小车进行仿真,并且测试了添加自定义的传感器,在本文章中将进一步介绍如何利用scout mini小车 在仿真环境中建图和导航。 仓库链接: https://gitee.com/agent-explorer/ro…

ComfyUI进阶篇:ControlNet核心节点

前言: ControlNet_aux库包含大量的图片预处理节点,功能丰富,适用于图像分割、边缘检测、姿势检测、深度图处理等多种预处理方式。掌握这些节点的使用是利用ControlNet的关键,本篇文章将帮助您理解和学会使用这些节点。 目录 一、安装方法 二、模型下载 三、Segmentor节点 四…

面对百度的无期徒刑,幸好还有微软的必应

昨天我们通过【i博客园】公众号发布文章 被百度降权的经历:没有百度的日子,是百度给的无期徒刑 时发现,百度不但没有回心转意,反而对园子的处罚更加严厉了,博客主站(www域名)的新发内容一天内0收录。而在去年9月21日我们完全解除对百度蜘蛛的屏蔽后(详见博文),9月25日…

2024-07-11 npm publish报错合集

报错1:This package has been marked as private npm ERR! 你的包被设为私有模式了。npm ERR! code EPRIVATE npm ERR! This package has been marked as private npm ERR! Remove the private field from the package.json to publish it.原因:你发布的包被标记为私有了,如…

midjourney 入门操作

midjourney 入门操作 settings面板选择模型当从 V6 切换到 Niji模型时,Current suffix会添加参数default V6面板功能介绍RAW Mode功能--style raw 使用的是另一种模式,对于已经熟练掌握提示功能并希望对图像进行更多控制的用户来说,这种模式可能会很有效。使用--style raw 制…