如何使用cuDF加速Pandas?


在資料分析領域中,Python 的應用非常廣泛,Pandas 作為一款著名的庫,因其強大的資料處理能力而被廣泛使用。然而,在使用 Pandas 處理大型資料集時,尤其是在以 CPU 為中心的系統上,可能會遇到速度瓶頸。解決此問題的絕佳方案是 cuDF,這是一個由 NVIDIA 在 RAPIDS 生態系統下精心打造的 GPU DataFrame 庫。cuDF巧妙地利用了 GPU 的強大功能來實現並行資料處理,從而在效能方面顯著優於傳統的 Pandas 操作。本文旨在指導您如何使用 cuDF 加速 Pandas,併為每一行程式碼提供清晰的解釋。

獲取 cuDF

在深入研究程式碼的核心之前,務必確保已在您的環境中成功安裝了 cuDF。您可以透過 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 提供的功能。例如,讓我們過濾 DataFrame,僅包含“年齡”大於 25 的行:

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。然後將其轉換為 cuDF DataFrame,以便您可以使用 GPU 處理能力進行資料操作。該指令碼過濾 cuDF DataFrame,僅包含“年齡”大於 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 等工具將進一步簡化您的工作流程,提高資料科學專案中的效率和生產力。因此,請大膽嘗試,並讓您的資料故事精彩呈現!

更新於: 2023年8月9日

253 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.