📜  如何缩放 Pandas DataFrame 列?

📅  最后修改于: 2022-05-13 01:54:36.991000             🧑  作者: Mango

如何缩放 Pandas DataFrame 列?

当数据集具有不同比例的不同列的值时,很难分析趋势和模式以及特征或列的比较。因此,在所有列的比例有显着差异的情况下,需要以这样的方式修改所有这些值都属于相同的比例。这个过程称为缩放

关于如何缩放 Pandas 数据帧的列,有两种最常见的技术——Min -Max Normalization 和 Standardization 。这两者都在下面的内容中进行了讨论。

使用中的数据集: Iris

最小-最大归一化

这里,所有值都在 [0,1] 范围内缩放,其中 0 是最小值,1 是最大值。最小-最大归一化的公式是 -



X_{norm} = \frac{X-X_{min}}{X_{max}-X_{min}}

方法 1:使用 Pandas 和 Numpy

第一种方法是单独计算公式中给出的所需值,然后将其应用于数据集。

例子:

Python3
import seaborn as sns
import pandas as pd
import numpy as np
 
data = sns.load_dataset('iris')
print('Original Dataset')
data.head()
 
# Min-Max Normalization
df = data.drop('species', axis=1)
df_norm = (df-df.min())/(df.max()-df.min())
df_norm = pd.concat((df_norm, data.species), 1)
 
print("Scaled Dataset Using Pandas")
df_norm.head()


Python3
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
 
data = sns.load_dataset('iris')
print('Original Dataset')
data.head()
 
scaler = MinMaxScaler()
 
df_scaled = scaler.fit_transform(df.to_numpy())
df_scaled = pd.DataFrame(df_scaled, columns=[
  'sepal_length', 'sepal_width', 'petal_length', 'petal_width'])
 
print("Scaled Dataset Using MinMaxScaler")
df_scaled.head()


Python3
import pandas as pd
from sklearn.preprocessing import StandardScaler
import seaborn as sns
 
data = sns.load_dataset('iris')
print('Original Dataset')
data.head()
 
std_scaler = StandardScaler()
 
df_scaled = std_scaler.fit_transform(df.to_numpy())
df_scaled = pd.DataFrame(df_scaled, columns=[
  'sepal_length','sepal_width','petal_length','petal_width'])
 
print("Scaled Dataset Using StandardScaler")
df_scaled.head()


输出:

方法 2:使用 sklearn 中的 MinMaxScaler



这是执行相同操作的直接方法。它只需要导入 sklearn 模块。

例子:

蟒蛇3

import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
 
data = sns.load_dataset('iris')
print('Original Dataset')
data.head()
 
scaler = MinMaxScaler()
 
df_scaled = scaler.fit_transform(df.to_numpy())
df_scaled = pd.DataFrame(df_scaled, columns=[
  'sepal_length', 'sepal_width', 'petal_length', 'petal_width'])
 
print("Scaled Dataset Using MinMaxScaler")
df_scaled.head()

输出:

标准化

标准化没有任何固定的最小值或最大值。此处,所有列的值都以均值等于 0 且标准差等于 1 的方式进行缩放。这种缩放技术适用于异常值。因此,如果数据集中存在异常值,则首选此技术。

例子:

蟒蛇3

import pandas as pd
from sklearn.preprocessing import StandardScaler
import seaborn as sns
 
data = sns.load_dataset('iris')
print('Original Dataset')
data.head()
 
std_scaler = StandardScaler()
 
df_scaled = std_scaler.fit_transform(df.to_numpy())
df_scaled = pd.DataFrame(df_scaled, columns=[
  'sepal_length','sepal_width','petal_length','petal_width'])
 
print("Scaled Dataset Using StandardScaler")
df_scaled.head()


输出 :