如何缩放 Pandas DataFrame 列?
当数据集具有不同比例的不同列的值时,很难分析趋势和模式以及特征或列的比较。因此,在所有列的比例有显着差异的情况下,需要以这样的方式修改所有这些值都属于相同的比例。这个过程称为缩放。
关于如何缩放 Pandas 数据帧的列,有两种最常见的技术——Min -Max Normalization 和 Standardization 。这两者都在下面的内容中进行了讨论。
使用中的数据集: Iris
最小-最大归一化
这里,所有值都在 [0,1] 范围内缩放,其中 0 是最小值,1 是最大值。最小-最大归一化的公式是 -
方法 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()
输出 :