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

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"})
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祁娥安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值