如何在 Pandas DataFrame 中标准化数据?

pythonobject oriented programmingprogramming

在广阔的数据探索领域中,标准化(有时称为特征缩放)作为准备步骤发挥着至关重要的作用。它涉及将不同的数据元素转换为协调的范围或比例,从而实现公平的分析和比较。Python 的非凡库 Pandas 无缝地促进了这一努力。

将 Pandas DataFrames 描绘为二维、不断变化的异构表格数据数组,经过精心设计以简化数据操作。凭借直观的语法和动态功能,它已成为全球数据爱好者的首选结构。让我们深入研究可以采用哪些方法来标准化此类 DataFrame 中的数据组件。

算法

在本文的范围内,我们将重点介绍 Pandas DataFrame 中的以下数据标准化方法:

a. 拥抱 sklearn.preprocessing.StandardScaler 的强大功能

b. 利用 z-score 释放 pandas.DataFrame.apply 方法的潜力

c. 利用 pandas.DataFrame.subtract 和 pandas.DataFrame.divide 方法的多功能性

d.深入探索 pandas.DataFrame.sub 和 pandas.DataFrame.div 方法

语法

在本文中,我们将依赖 pandas 库,该库为我们提供了一系列函数来操作 DataFrames。以下是每种方法语法的简要概述:

StandardScaler

scaler = StandardScaler()

`StandardScaler` 是 `sklearn.preprocessing` 模块中的一个类,用于通过删除平均值并缩放到单位方差来标准化特征。首先,创建 `StandardScaler` 类的实例。

fit_transform()

scaler.fit_transform(X)

`fit_transform()` 方法用于标准化输入数据 `X`。

apply

df.apply(func, axis=0)

`apply()` 是 Pandas 数据框方法,用于沿指定轴(行或列)应用函数。 `func` 是要应用的函数,`axis` 是应用函数的轴(0 表示列,1 表示行)。

减法和除法

df.subtract(df.mean()).divide(df.std())

此语法通过减去平均值(`df.mean()`)并除以每列的标准差(`df.std()`)来标准化 Pandas 数据框。

sub 和 div

df.sub(df.mean()).div(df.std())

以下代码片段演示了执行元素减法和除法以标准化 Pandas 的不同方法DataFrame。每种方法都利用 sub() 和 div() 方法的变体,而不是 subtract() 和 divide()。

这些操作通常用于减去 DataFrame 中每列的平均值并除以标准差。

示例

使用 sklearn.preprocessing.StandardScaler

在下面的例子中,我们将:

1. 导入必要的库:来自 sklearn、pandas 和 numpy 的 StandardScaler。

2. 创建一个示例 DataFrame"df",其中只有一个列"A",包含 1 到 5 的值。

3. 实例化 StandardScaler 对象"scaler",并通过应用 fit_transform() 方法使用它来规范化列"A"。

4.打印更新后的 DataFrame,其中标准化值位于"A"列中。

from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np

# 构建示例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5]
})

# 初始化缩放器
scaler = StandardScaler()

# 拟合和转换数据
df['A'] = scaler.fit_transform(np.array(df['A']).reshape(-1, 1))

print(df)

输出

          A
0 -1.414214
1 -0.707107
2  0.000000
3  0.707107
4  1.414214

使用 pandas.DataFrame.apply 方法和 z-score

在下面的例子中,我们将:

1. 导入 pandas 库并创建一个示例 DataFrame"df",其中只有一个列"A",包含 1 到 5 的值。

2. 定义一个函数"standardize",该函数接受一个列并通过减去平均值并除以标准差来返回标准化值。

3. 使用 apply() 方法将"standardize"函数应用于列"A"。

4.打印更新后的 DataFrame,其中包含列"A"中的标准化值。

import pandas as pd

# 构建示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5]
})

def standardize(column):
    return (column - column.mean()) / column.std()

# 使用 apply 函数对列"A"进行标准化
df['A'] = df['A'].apply(standardize)

print(df)

输出

          A
0 -1.414214
1 -0.707107
2  0.000000
3  0.707107
4  1.414214

利用 pandas.DataFrame.subtract 和 pandas.DataFrame.divide 方法

在下面的例子中,我们将:

1. 导入 pandas 库并创建一个示例 DataFrame"df",其中只有一个列"A",包含 1 到 5 的值。

2. 使用 mean() 和 std() 方法计算列"A"的平均值和标准差。

3. 使用 subtract() 和 divide() 方法减去平均值并除以标准差,从而标准化列"A"。

4.打印更新后的 DataFrame,其中包含列"A"中的标准化值。

import pandas as pd

# 构建示例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5]
})

# 使用减法和除法对列"A"进行标准化
df['A'] = df['A'].subtract(df['A'].mean()).divide(df['A'].std())

print(df)

输出

          A
0 -1.414214
1 -0.707107
2  0.000000
3  0.707107
4  1.414214

利用 pandas.DataFrame.sub 和 pandas.DataFrame.div 方法

在下面的示例中,我们将:

1. 导入 pandas 库并创建一个示例 DataFrame"df",其中只有一个列"A",包含 1 到 5 的值。

2. 使用 mean() 和 std() 方法计算列"A"的平均值和标准差。

3. 使用 sub() 和 div() 方法减去平均值并除以标准差,从而标准化列"A"。

4.打印更新后的 DataFrame,其中"A"列中的值已标准化。

import pandas as pd

# 构建示例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5]
})

# 使用 sub 和 div 方法对"A"列进行标准化
df['A'] = df['A'].sub(df['A'].mean()).div(df['A'].std())

print(df)

输出

          A
0 -1.264911
1 -0.632456
2  0.000000
3  0.632456
4  1.264911

结论

总之,数据标准化在各种机器学习算法的预处理中起着关键作用,因为它们对输入特征的规模很敏感。选择合适的标准化方法取决于具体算法和数据的性质。当内容遵循正态分布时,Z 分数标准化会找到其适用之处,而最小-最大标准化则是未知或非正态分布的合适选择。尽管如此,在数据相关工作中做出谨慎的决策需要在致力于特定的缩放方法之前对数据本身有深刻的理解。掌握这些方法的基本原理并掌握它们在 Python 中的实现,为在数据探索的启蒙之旅中前进奠定了坚实的基础。


相关文章