向量化操作是 Pandas 的一個強大特性

侬侬发發表於2024-08-22

向量化操作是 Pandas 的一個強大特性,它允許你對整個 DataFrameSeries 進行操作,而不需要顯式地寫出迴圈。向量化操作利用底層的 C 語言實現和最佳化,使得它在處理大資料集時比迴圈效率更高。

使用向量化操作替代 iterrows() 的示例

假設你有以下 DataFrame df,並且你想要在每一行上執行某些操作:

import pandas as pd

data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

示例 1: 對某一列的資料進行轉換

假設你想對 A 列中的每個值加 10,使用 iterrows() 你可能會這樣做:

import pandas as pd

data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

使用向量化操作,只需一行程式碼:

df['A'] = df['A'] + 10

示例 2: 根據多列的條件來生成新列

假設你想根據 AB 兩列的值生成新的一列 D,內容是 AB 的和,使用 iterrows() 你可能會這樣做:

for index, row in df.iterrows():
    df.at[index, 'D'] = row['A'] + row['B']

使用向量化操作:

df['D'] = df['A'] + df['B']

示例 3: 條件篩選並修改

假設你想在 C 列大於 7 時,將 A 列的值改為 0,使用 iterrows() 你可能會這樣做:

for index, row in df.iterrows():
    if row['C'] > 7:
        df.at[index, 'A'] = 0

使用向量化操作:

df.loc[df['C'] > 7, 'A'] = 0

示例 4: 使用 apply 函式進行更復雜的操作

如果你需要對一列的值進行復雜的變換,使用 apply 是向量化操作的一個變體,效能仍然優於 iterrows()。例如:

df['A'] = df['A'].apply(lambda x: x ** 2 + 2 * x + 1)

為什麼向量化操作更快?

  • 底層實現:向量化操作是在底層 C 或 Cython 程式碼中直接執行的,這比逐行操作的 Python 迴圈快得多。
  • 減少 Python 迴圈iterrows() 逐行操作,每一行的資料處理都會引起 Python 直譯器的呼叫,而向量化操作通常是在更接近硬體的層次上執行的。
  • 平行計算:在某些情況下,向量化操作可以自動並行化,從而進一步提升效能。

總結

儘可能使用向量化操作來代替迴圈和 iterrows(),這會讓程式碼不僅更簡潔,而且效能也會顯著提升。在處理大型資料集時,這種效能差異尤為明顯。

相關文章