算法金 | 来了,pandas 2.0

news2024/11/26 11:45:15


大侠幸会,在下全网同名「算法金」 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 pd

def 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_obj

    def 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.coloradmin.cn/o/1930009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter常用组件及执行顺序

一 常用组件 1.线程组 Thread Group 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等…

明日周刊-第16期

最近很想去看一场蔡健雅的演唱会,以前从来没去过演唱会。原先是想把第一次机会留给周杰伦的演唱会,但是周董的票太难抢了。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、经济与市场 北京二手房价环比上涨: 6月份,北京二…

JavaScript原型

前言 **原型的使用:**可以通过原型对象来添加共享的方法,这样所有通过该构造函数创建的对象实例都可以访问和使用这些方法。 举例 ● 例如我们现在想在构造函数中添加一个计算年龄的方法,并且这个方法可以让所有的对象实例都可以访问到 P…

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析(Overload Resolution)--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…

互联网末法时代的一些思考

这篇文章也是临时起意,很长一段时间没写个人思考类的文章,主要原因也是时间完全不够用。随着年龄的增长,看待问题的视角也逐渐发生变化,例如从关注现象到关注动机,从关注结果到关注起因,2021年的时代我曾经…

前端设计模式:教科书般的实践指南

前端设计模式:教科书般的实践指南 引言 亲爱的前端小伙伴们,你们是否曾经在代码的海洋中迷失方向?是否曾经被项目经理的"简单需求"折磨得欲仙欲死?别担心,今天我们就来聊聊那些能让你在前端江湖中纵横捭阖…

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 QT6 6.7.2 1 windows 1.1 cmake 1.1.1 修改.exe程序图…

新书速览|深入理解Hive:从基础到高阶:视频教学版

《深入理解Hive:从基础到高阶:视频教学版》 本书内容 《深入理解Hive:从基础到高阶:视频教学版》采用“理论实战”的形式编写,通过大量的实例,结合作者多年一线开发实战经验,全面地介绍Hive的使用方法。《深入理解Hiv…

昂科烧录器支持Hynetek慧能泰半导体的三端口控制器HUSB366

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Hynetek慧能泰半导体的三端口控制器HUSB366已经被昂科的通用烧录平台AP8000所支持。 HUSB366是一款高性能、高集成度的双USB Type-C和一个USB Type-A三端口控制器,…

如何将电子书发送到kindle

修改guide Amazon之kindle 修改邮箱 参考: blog 多种方式:如何将电子书发送到kindle

不用ps?AI生成免抠素材,让你的工作效率翻倍!

在当今的工作和创作中,免抠素材的重要性日益凸显。无论是制作精美的 PPT ,还是设计个性化的电子手账,优质的免抠素材都能起到画龙点睛的作用。然而,寻找合适的免抠素材并非易事,很多时候我们会面临各种困扰。 有不少朋…

PHP webshell 免杀方法

本文介绍php类webshell简单的免杀方法,总结不一定全面,仅供读者参考。 webshell通常可分为一句话木马,小马,大马,内存马。 一句话木马是最简单也是最常见的webshell形式,这种木马体积小,隐蔽较…

大厂必争之地!AI搜索产品万字长文分析

多年以前,百度、谷歌等就在开始做智能搜索,但彼时的智能搜索只是对搜索结果的简单整理归纳,效果并不如人意。当前AI爆火,在AI的加持下,搜索会不会更强大一些呢?其实并不是,至少当前AI搜索的使用…

MyBatis源码中的设计模式2

组合模式的应用 组合模式介绍 组合模式(Composite Pattern) 的定义是:将对象组合成树形结构以表示整体和部分的层次结构。组合模式可以让用户统一对待单个对象和对象的组合。 比如:Windows操作系统中的目录结构,通过tree命令实现树形结构展…

安装 MySQL,修改用户名、放通外部机器访问

Hello,好记性不如烂笔头~ 虽说不会经常部署 MySQL ( OS:当然了,这服务不是公司部署好等着用就好了吗~?) 但!作为程序员、能够随手、无卡顿的部署并使用一个新的数据库 / 数据库集群也算是基操了…

【Blockly图形化积木编程二次开发学习笔记】1.工具箱的实现

文章目录 Blockly 版本选择上手 Blockly 版本选择 在【兰州大学】Blockly创意趣味编程【全36讲】主讲教师:崔向平 周庆国中提到,在18年6月份之前的版本中,可以通过安装依赖库的方式,打开开发者工具的离线版本,但是新版…

AWS CDN新增用户ip 地区 城市 响应头

1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数,应用你写的这个函数 function handler(event) {var request event.request;var respon…

Raw Socket(二)循环队列收发数据

完整代码在: 添加链接描述 其中tcp_handshake文件夹是实现TCP三次握手的demo。 完整代码参考: https://github.com/praveenkmurthy/Raw-Sockets 代码实现基于raw socket的TCP协议,发送http请求包并接收回包,…

JAVA中的Prim和Dijkstra问题详解

1.概念 Prim算法是一种计算加权无向图的最小生成树的算法。所谓最小生成树,是指一个图的子图,它包含图中所有的顶点,并且有保持图连通的最少的边,且所有边的权值之和最小。Prim算法的基本思想是从图中任意一个顶点开始&#xff0…

Go Web开发框架之Gin

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…