如何縮放 Pandas DataFrame 列?


縮放是資料分析中預處理資料並確保資料集中的所有特徵具有相似範圍的過程,這使得它們更易於比較,並減少不同尺度對機器學習演算法的影響。我們可以使用最小-最大縮放、標準化、穩健縮放和對數變換等方法來縮放 Pandas DataFrame 列。在本文中,我們將深入探討使用各種方法縮放 Pandas DataFrame 的過程。

為什麼縮放很重要?

  • 資料中的一些特徵可能具有較大的值,在進行分析或模型訓練時可能會佔據主導地位。縮放確保所有特徵具有相似的範圍,防止某些特徵在分析中佔據主導地位。

  • 一些機器學習演算法,如 k 近鄰和支援向量機,依賴於基於距離的計算。縮放確保特徵對計算做出同等貢獻。

  • 縮放還可以提高收斂速度和梯度下降演算法等迭代演算法的效能。

  • 由於縮放,具有相似尺度的特徵更容易進行比較。

使用 Pandas 縮放 DataFrame 列

方法 1:使用最小-最大縮放

最小-最大縮放也稱為歸一化。使用最小-最大縮放,我們可以將資料調整到固定的範圍,通常在 0 到 1 之間。原始分佈形狀得以保留,同時保持最小值和最大值。

語法

 df[column_name] = (df[column_name] - df[column_name].min()) / (df[column_name].max() - df[column_name].min())

在這裡,最小-最大縮放透過減去最小值併除以範圍(最大值減去最小值)來將列的值重新縮放至 0 到 1 之間。

示例

在下面的示例中,我們使用 min() 和 max() 方法來計算列的最小值和最大值。然後,我們可以應用縮放公式將值重新縮放至 0 到 1 之間。

import pandas as pd

# Create a sample DataFrame
data = {'Name': ['John', 'Emma', 'Tom', 'Emily', 'Mike'],
        'Salary': [50000, 80000, 45000, 70000, 90000]}
df = pd.DataFrame(data)

# Print the original DataFrame
print("Original DataFrame:")
print(df)
print()

#  Min-Max Scaling
def min_max_scaling(df, column_name):
    min_value = df[column_name].min()
    max_value = df[column_name].max()
    df[column_name] = (df[column_name] - min_value) / (max_value - min_value)

# Apply min-max scaling to 'Salary' column
min_max_scaling(df, 'Salary')

# Print the DataFrame after min-max scaling
print("DataFrame after Min-Max Scaling:")
print(df)
print()

輸出

Original DataFrame:
    Name  Salary
0   John   50000
1   Emma   80000
2    Tom   45000
3  Emily   70000
4   Mike   90000

DataFrame after Min-Max Scaling:
    Name    Salary
0   John  0.111111
1   Emma  0.777778
2    Tom  0.000000
3  Emily  0.555556
4   Mike  1.000000

方法 2:使用標準化技術

標準化將資料轉換為均值為零且方差為一的標準。使用標準化,資料以均值為中心,並根據標準差進行縮放。生成的分佈均值為 0,標準差為 1。

語法

df[column_name] = (df[column_name] - df[column_name].mean()) / df[column_name].std()

在這裡,標準化透過減去均值併除以標準差來轉換列的值,使其具有零均值和單位方差。

示例

在下面的示例中,定義了一個名為 standardization 的函式,用於對指定的列執行標準化。該函式計算列的均值和標準差,然後應用標準化公式來縮放值。最後,該函式在 DataFrame 的“Salary”列上呼叫,從而使值標準化。列印修改後的 DataFrame 以顯示標準化過程的結果。

import pandas as pd

# Create a sample DataFrame
data = {'Name': ['John', 'Emma', 'Tom', 'Emily', 'Mike'],
        'Salary': [50000, 80000, 45000, 70000, 90000]}
df = pd.DataFrame(data)

# Print the original DataFrame
print("Original DataFrame:")
print(df)
print()

# standardization 
def standardization(df, column_name):
    mean_value = df[column_name].mean()
    std_value = df[column_name].std()
    df[column_name] = (df[column_name] - mean_value) / std_value

# Apply standardization to 'Salary' column
standardization(df, 'Salary')

# Print the DataFrame after standardization
print("DataFrame after Standardization:")
print(df)
print()

輸出

Original DataFrame:
    Name  Salary
0   John   50000
1   Emma   80000
2    Tom   45000
3  Emily   70000
4   Mike   90000

DataFrame after Standardization:
    Name    Salary
0   John -0.883788
1   Emma  0.675838
2    Tom -1.143726
3  Emily  0.155963
4   Mike  1.195713

方法 3:使用穩健縮放

穩健縮放與標準化有些相似,但它使用中位數和四分位數間距 (IQR) 來代替均值和標準差。異常值對穩健縮放的影響不大,因此它適用於包含極值的資料集。

語法

df[column_name] = (df[column_name] - df[column_name].median()) / (df[column_name].quantile(0.75) - df[column_name].quantile(0.25))

在這裡,穩健縮放使用中位數和四分位數間距 (IQR) 來重新縮放列的值,IQR 是第 25 個百分位數 (Q1) 和第 75 個百分位數 (Q3) 之間的範圍。

示例

在下面的示例中,定義了一個名為 robust_scaling 的函式,用於對指定的列執行穩健縮放。在函式內部,計算列的中位數、第一四分位數 (q1)、第三四分位數 (q3) 和四分位數間距 (IQR)。然後透過減去中位數併除以 IQR 來縮放列值。最後,該函式應用於 DataFrame 的“Salary”列,從而使值進行穩健縮放。列印修改後的 DataFrame 以顯示穩健縮放過程的結果。

import pandas as pd

# Create a sample DataFrame
data = {'Name': ['John', 'Emma', 'Tom', 'Emily', 'Mike'],
        'Salary': [50000, 80000, 45000, 70000, 90000]}
df = pd.DataFrame(data)

# Print the original DataFrame
print("Original DataFrame:")
print(df)
print()

# robust scaling
def robust_scaling(df, column_name):
    median_value = df[column_name].median()
    q1 = df[column_name].quantile(0.25)
    q3 = df[column_name].quantile(0.75)
    iqr = q3 - q1
    df[column_name] = (df[column_name] - median_value) / iqr

# Apply robust scaling to 'Salary' column
robust_scaling(df, 'Salary')

# Print the DataFrame after robust scaling
print("DataFrame after Robust Scaling:")
print(df)
print()

輸出

Original DataFrame:
    Name  Salary
0   John   50000
1   Emma   80000
2    Tom   45000
3  Emily   70000
4   Mike   90000

DataFrame after Robust Scaling:
    Name    Salary
0   John -0.666667
1   Emma  0.333333
2    Tom -0.833333
3  Emily  0.000000
4   Mike  0.666667

方法 4:使用對數變換方法

對數變換使用對數函式對資料應用非線性縮放。它減少了包含高度偏斜資料的 資料分佈的偏斜度影響。

語法

import numpy as np
df[column_name] = np.log(df[column_name])

在這裡,對數變換將對數函式應用於列的值,這有助於減少偏斜度的影響並將較大的值壓縮為較小的值。

示例

在下面的示例中,定義了一個名為 log_transformation 的函式,用於對指定的列執行對數變換。在函式內部,使用 NumPy 庫中的 np.log() 函式將對數變換應用於列中的值。然後將該函式應用於 DataFrame 的“Salary”列,從而使值進行對數變換。列印修改後的 DataFrame 以顯示對數變換過程的結果。

import pandas as pd

# Create a sample DataFrame
data = {'Name': ['John', 'Emma', 'Tom', 'Emily', 'Mike'],
        'Salary': [50000, 80000, 45000, 70000, 90000]}
df = pd.DataFrame(data)

# Print the original DataFrame
print("Original DataFrame:")
print(df)
print()


import numpy as np
# log transformation
def log_transformation(df, column_name):
    df[column_name] = np.log(df[column_name])

# Apply log transformation to 'Salary' column
log_transformation(df, 'Salary')

# Print the DataFrame after log transformation
print("DataFrame after Log Transformation:")
print(df)

輸出

Original DataFrame:
    Name  Salary
0   John   50000
1   Emma   80000
2    Tom   45000
3  Emily   70000
4   Mike   90000

DataFrame after Log Transformation:
    Name     Salary
0   John  10.819778
1   Emma  11.289782
2    Tom  10.714418
3  Emily  11.156251
4   Mike  11.407565

結論

在本文中,我們討論瞭如何在資料處理和分析中縮放 DataFrame 列。縮放可確保特徵具有相似的範圍,使它們更易於比較,並減少不同比例對機器學習演算法的影響。我們可以使用不同的縮放技術,如最小-最大縮放、標準化、穩健縮放和對數變換。

更新於:2023年10月13日

2000+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告