再见 Pandas,又一数据处理神器

news2025/2/25 4:19:15

cuDF介绍

cuDF是一个基于Apache Arrow列内存格式的Python GPU DataFrame库,用于加载、连接、聚合、过滤和其他数据操作。cuDF还提供了类似于pandas的API。
在这里插入图片描述
GitHub:
https://github.com/rapidsai/cudf
Documentation:
https://docs.rapids.ai/api/cudf/stable

相关框架介绍

cuDF:cuDF是一个Python GPU DataFrame库,它基于Apache Arrow的列式内存格式,用于加载、连接、聚合、过滤和以类似pandas的DataFrame风格API操纵表格数据。它允许数据工程师和数据科学家通过类似于pandas的API轻松加速其工作流程,而无需深入研究CUDA编程的细节。cuDF的设计旨在在GPU上处理大规模数据集,提供了对数据处理任务的高性能支持。

Dask:Dask是一个灵活的Python并行计算库,使得在工作流程中平滑而简单地实现规模化。在CPU上,Dask使用Pandas来并行执行DataFrame分区上的操作。它允许用户以更大规模处理数据,充分发挥计算资源,而无需对代码进行大规模更改。

Dask-cuDF:Dask-cuDF在需要的情况下扩展Dask,以允许其DataFrame分区使用cuDF GPU DataFrame而不是Pandas DataFrame进行处理。例如,当调用dask_cudf.read_csv(…)时,集群的GPU通过调用cudf.read_csv()来执行解析CSV文件的工作。这使得在GPU上利用cuDF的高性能数据处理能力,从而加速大规模数据处理任务。

cuDF和Pandas比较

cuDF是一个DataFrame库,它与Pandas API密切匹配,但直接使用时并不是Pandas的完全替代品。在API和行为方面,cuDF和Pandas之间存在一些差异。以下是cuDF和Pandas之间的相似之处和差异的对比:

支持的操作:
cuDF支持许多与Pandas相同的数据结构和操作,包括Series、DataFrame、Index等,以及它们的一元和二元操作、索引、过滤、连接、分组和窗口操作等。

数据类型:
cuDF支持Pandas中常用的数据类型,包括数值、日期时间、时间戳、字符串和分类数据类型。此外,cuDF还支持用于十进制、列表和“结构”值的特殊数据类型。

缺失值:
与Pandas不同,cuDF中的所有数据类型都是可为空的,意味着它们可以包含缺失值(用cudf.NA表示)。

迭代:
在cuDF中,不支持对Series、DataFrame或Index进行迭代。因为在GPU上迭代数据会导致极差的性能,GPU优化用于高度并行操作而不是顺序操作。

结果排序:
默认情况下,cuDF中的join(或merge)和groupby操作不保证输出排序。与Pandas相比,需要显式传递sort=True或在尝试匹配Pandas行为时启用mode.pandas_compatible选项。

浮点运算:
cuDF利用GPU并行执行操作,因此操作的顺序不总是确定的。这影响浮点运算的确定性,因为浮点运算是非关联的。在比较浮点结果时,建议使用cudf.testing模块提供的函数,允许您根据所需的精度比较值。

列名:
与Pandas不同,cuDF不支持重复的列名。最好使用唯一的字符串作为列名。

没有真正的“object”数据类型:
与Pandas和NumPy不同,cuDF不支持“object”数据类型,用于存储任意Python对象的集合。

.apply()函数限制:
cuDF支持.apply()函数,但它依赖于Numba对用户定义的函数(UDF)进行JIT编译并在GPU上执行。这可以非常快速,但对UDF中允许的操作施加了一些限制。
何时使用cuDF和Dask-cuDF

cuDF:
当您的工作流在单个GPU上足够快,或者您的数据在单个GPU的内存中轻松容纳时,您会希望使用cuDF。
当数据量不大,可以在单个GPU内存中处理时,cuDF提供了对单个GPU上高性能数据操作的支持。

Dask-cuDF:
当您希望在多个GPU上分布您的工作流程时,或者您的数据量超过了单个GPU内存的容量,或者希望同时分析许多文件中分布的数据时,您会希望使用Dask-cuDF。
Dask-cuDF允许您在分布式GPU环境中进行高性能的数据处理,特别是当数据集太大,无法容纳在单个GPU内存中时。

cuDF代码案例

import os
import pandas as pd
import cudf

# Creating a cudf.Series
s = cudf.Series([1, 2, 3, None, 4])

# Creating a cudf.DataFrame
df = cudf.DataFrame(
    {
        "a": list(range(20)),
        "b": list(reversed(range(20))),
        "c": list(range(20)),
    }
)

# read data directly into a dask_cudf.DataFrame with read_csv
pdf = pd.DataFrame({"a": [0, 1, 2, 3], "b": [0.1, 0.2, None, 0.3]})
gdf = cudf.DataFrame.from_pandas(pdf)
gdf

# Viewing the top rows of a GPU dataframe.
ddf.head(2)

# Sorting by values.
df.sort_values(by="b")

# Selecting a single column
df["a"]

# Selecting rows from index 2 to index 5 from columns ‘a’ and ‘b’.
df.loc[2:5, ["a", "b"]]

# Selecting via integers and integer slices, like numpy/pandas.
df.iloc[0:3, 0:2]

# Selecting rows in a DataFrame or Series by direct Boolean indexing.
df[df.b > 15]

# Grouping and then applying the sum function to the grouped data.
df.groupby("agg_col1").agg({"a": "max", "b": "mean", "c": "sum"})

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

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

相关文章

基于springboot+vue的大学生就业需求分析系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

2.亿级积分数据分库分表:增量数据同步之代码双写,为什么没用Canal?

1.亿级积分数据分库分表:总体方案设计 上一篇博客中写了一下积分数据分库分表的总体方案设计,里面说了采用应用程序代码双写的方式实现的增量数据同步,本篇就对这一块进行一些细化的介绍,包括: 为什么不用Canal监听数…

WebServer -- 八股(终章)

👂 Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 🌼触类旁通 🚩线程 && 进程 线程与进程的区别 多线程锁是什么 进程 / 线程 / 协程 的区别 线程切换时,需要切换的状态 🎂并发 && 并行 并…

一起玩儿3D打印机——03 Marlin固件的获取和安装环境的配置

摘要:本文介绍Marlin固件的获取和安装环境的配置 Marlin是一款开源软件,其主页为:https://marlinfw.org/,首页正中就是下载连接,如下图所示: 单击下面的“Download Marlin 2.1.2.2”按钮就会进入下载页面&a…

Transformer学习笔记(一)

一、预训练 1、图像领域的预训练 通过 ImageNet 数据集我们训练出一个模型 A由于 CNN 的浅层学到的特征通用性特别强,我们可以对模型 A 做出一部分改进得到模型 B(两种方法): 冻结:浅层参数使用模型 A 的参数&#x…

postgres中的hook机制

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:14,13,12,11 文档用途 1.了解使用postgres中的hook机制,在不更改内核代码的前提下完成一些定制化需求; 2.从底层理解插…

Visual Studio 2022 出现:E1696无法打开 源 文件 “stdafx.h“;E0020未定义标识符 “_TCHAR“错误解决办法

今天在用自己电脑上的visual studio2022写并行计算实验报告时出现了这种错误,但我在机房电脑vs2010版本运行时没有任何问题,于是我在网上找了解决办法,现总结如下。 1.报错E1696无法打开 源 文件 "stdafx.h",解决办法&a…

移动通信网络AT指令

AT 命令是用来控制 TE(如 PC 等用户终端)和 MT(如移动台等移动终端)之间交互 的规则 AT 命令的返回值包括两部分,响应信息和结果码。 PLMN 移动通信网络PLMN = MCC + MNC,PLMN由MCC移动国家码和MNC移动网络码组成,例如:中国移动GSM的PLMN为:46000(MCC:460, M…

Internet Download Manager(IDM下载) v6.42.3 绿色版介绍

互联网下载管理器是一个广泛使用的软件,它可以帮助用户更好地管理和加速他们的下载。最新版本v6.42.3已经发布,它带来了一系列新功能和改进,让用户更加方便和快速地下载他们需要的文件。 新版本的互联网下载管理器增加了对最新浏览器的支持&…

通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9 //1、创建用于连接…

题目:特殊的三角形(蓝桥OJ 3008)

问题描述&#xff1a; 解题思路&#xff1a; 可以先求出1~1e6每个位置是否有解&#xff0c;后计算前缀和再求出不同区间的和。&#xff08;时间复杂度小&#xff09; 进行dfs操作&#xff1a;依次组合1~1e6所有元素。并计算每一个组合的乘积&#xff0c;在该乘积位置的cnt加一。…

2024.3.15

1.单向循环链表 代码&#xff1a; #include"loop.h" //创建单向循环链表 loop_p create_loop_list() {loop_p H (loop_p)malloc(sizeof(loop));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; } //创建节点 loop_p…

AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

2024全国水科技大会-协办单位:海南立昇净水科技实业有限公司

海南立昇净水科技实业有限公司 集膜技术研发、生产和销售服务于一体的集团型高科技企业。30年来一直专注于“膜”技术研发&#xff0c;始终坚持走自主科技创新之路。在国内构建起由26家直属分公司和超过500家经销代理商组成的营销服务网络&#xff0c;立昇净水设备被广泛应用于…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

STL容器之list类

文章目录 STL容器之list类1、list的介绍2、list的使用2.1、list的常见构造2.2、list的iterator的使用2.3、list空间增长问题2.4、list的增删查改2.5、list迭代器失效问题 3、list的模拟实现&#xff08;含反向迭代器&#xff09; STL容器之list类 1、list的介绍 list是序列容器…

C++初阶:1_C++入门

C入门 零.本节知识点安排目的 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本章节主要目标&#xff1a; 补充C语言语法的不足&#xff0…

【S5PV210_视频编解码项目】裸机开发:实现按键的外部中断处理

加粗样式本文所作内容&#xff1a; 基于S5PV210芯片实现按键的外部中断处理程序&#xff0c;搭建中断处理流程框架 S5PV210对于中断处理的操作流程 1 外部中断得到触发&#xff1a; 1&#xff09;外部中断在初始化阶段得到使能 2&#xff09;外界达到了外部中断的触发条件 …

Spring注解方式整合三层架构

注解方式特点 1. 完全注解方式指的是去掉xml文件&#xff0c;使用配置类 注解实现 2. xml文件替换成使用Configuration注解标记的类 3. 标记IoC注解&#xff1a;Component,Service,Controller,Repository 4. 标记DI注解&#xff1a;Autowired Qualifier Resource Value 5. &…

html--简历

文章目录 html html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0&qu…