Python 如何使用cuDF加速Pandas

Python 如何使用cuDF加速Pandas

当谈到在数据分析领域中使用Python时,Pandas是一个著名的库,以其强大的数据操作能力而被广泛使用。然而,当通过Pandas处理大量数据集时,可能会遇到一些问题,特别是在以CPU为中心的系统中。解决这个问题的一个绝佳选择是cuDF,这是由NVIDIA在RAPIDS生态系统下精心打造的GPU DataFrame库。cuDF巧妙地利用GPU的能力来实现并行化数据处理,从而在性能上显著超越了传统的Pandas操作。本文旨在通过清晰的代码说明,指导您如何使用cuDF来提升Pandas的效率。

获取cuDF

在深入了解代码的核心之前,必须确保在您的环境中成功安装了cuDF。您可以通过Conda来实现这一点,Conda是一个广为人知的Python包管理器 −

conda install -c nvidia -c rapidsai -c numba -c conda-forge -c defaults cudf

请考虑到cuDF需要兼容的NVIDIA GPU和CUDA工具包才能实现最佳功能。关于安装指南和系统要求的详细指南,官方cuDF文档是您最好的选择:https://rapids.ai/start.html

召唤Pandas和cuDF

一旦装备好必要的库,就可以将Pandas和cuDF引入您的Python手稿中−

import pandas as pd
import cudf

将数据导入Pandas DataFrame

为了开始,我们将数据导入Pandas DataFrame中。为了简单起见,我们将使用pd.DataFrame()构造函数创建一个示例DataFrame。

data = {
   'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
   'Age': [25, 30, 35, 28, 22],
   'City': ['New York', 'Los Angeles', 'Chicago', 'San Francisco', 'Austin']
}
pandas_df = pd.DataFrame(data)

将Pandas DataFrame转换为cuDF DataFrame

为了利用由cuDF注入的GPU处理能力,我们的下一步是将Pandas DataFrame转换为cuDF DataFrame。可以使用cudf.from_pandas()函数执行这种变形操作。

cudf_df = cudf.from_pandas(pandas_df)

从这一点出发,在 cudf_df DataFrame 上执行的任何操作都将在 GPU 上执行,与基于 CPU 的 Pandas 操作相比,速度提升显著。

使用 cuDF 进行数据操作

现在将数据转换为 cuDF DataFrame,可以执行各种数据操作,类似于 Pandas 提供的功能。例如,让我们筛选出只包含“Age”超过 25 的行的 DataFrame −

filtered_cudf_df = cudf_df[cudf_df['Age'] > 25]
print(filtered_cudf_df)

观察到语法和函数调用几乎与Pandas相同,从而简化了两个库之间的转换。

将cuDF DataFrame转换回Pandas DataFrame

在使用cuDF进行所需的数据操作后,您可能需要将cuDF DataFrame转换回Pandas DataFrame以进行进一步处理或导出。为了实现这一目标,使用to_pandas()函数。

filtered_pandas_df = filtered_cudf_df.to_pandas()

以下是完整的Python代码:

# Step 1: Installing cuDF (run this in your system's terminal or command prompt)
# conda install -c nvidia -c rapidsai -c numba -c conda-forge -c defaults cudf

# Step 2: Importing Pandas and cuDF
import pandas as pd
import cudf

# Step 3: Creating a Pandas DataFrame
data = {
   'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
   'Age': [25, 30, 35, 28, 22],
   'City': ['New York', 'Los Angeles', 'Chicago', 'San Francisco', 'Austin']
}
pandas_df = pd.DataFrame(data)
print(pandas_df)

# Step 4: Converting Pandas DataFrame to cuDF DataFrame
cudf_df = cudf.from_pandas(pandas_df)

# Step 5: Applying data manipulation on cuDF DataFrame
filtered_cudf_df = cudf_df[cudf_df['Age'] > 25]
print(filtered_cudf_df)

# Step 6: Converting cuDF DataFrame back to Pandas DataFrame
filtered_pandas_df = filtered_cudf_df.to_pandas()
print(filtered_pandas_df)

该脚本创建了一个带有一些样本数据的Pandas DataFrame。然后将该DataFrame转换为cuDF DataFrame,从而可以利用GPU的处理能力进行数据操作。脚本会过滤cuDF DataFrame,只包括’Age’大于25的行。最后,将cuDF DataFrame转换回Pandas DataFrame。

根据这个,预测的输出应该是

Pandas DataFrame

Name  Age           City
0    Alice   25       New York
1      Bob   30    Los Angeles
2  Charlie   35        Chicago
3    David   28  San Francisco
4      Eva   22         Austin

过滤后的cuDF DataFrame

Name  Age           City
1      Bob   30    Los Angeles
2  Charlie   35        Chicago
3    David   28  San Francisco

过滤后的Pandas DataFrame

Name  Age           City
1      Bob   30    Los Angeles
2  Charlie   35        Chicago
3    David   28  San Francisco

结论

总之,cuDF作为RAPIDS生态系统的一部分,提供了提升数据分析任务性能的途径。与Pandas在API方面的惊人相似性使其成为那些习惯于使用Pandas操作的人的优秀工具。通过利用GPU并行处理的能力,cuDF在管理大型数据集时能够实现可观的性能提升。随着数据处理领域的不断发展,引入cuDF等工具将进一步简化工作流程,提高数据科学项目的效率和生产力。所以,赶紧开始,进行实验,让你的数据故事展开吧!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程