如何使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame?


由于 Python 拥有丰富的库和框架,它已成为数据分析和处理中最流行的编程语言之一。在这些库中,Pandas 作为数据处理中最有价值和最强大的工具之一脱颖而出。使用 Pandas,您可以轻松加载、转换和分析各种格式的数据。

在本教程中,我们将探讨如何使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame。将宽格式 DataFrame 转换为整洁格式是许多数据分析工作流程中的一个必要步骤,因为它可以更轻松地进行数据操作、绘图和建模。在本文的下一部分,我们将深入探讨 Pandas stack() 函数的细节,并演示如何将其用于此转换过程。

如何使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame?

在深入了解转换过程之前,让我们花点时间了解宽格式和整洁格式 DataFrame 的概念。

宽格式 DataFrame 的结构方式是,每一行代表一个单独的实体或观测值,例如一个人或一个产品。宽格式通常包含多个列,这些列存储与每个实体相关的不同属性或变量。

相反,整洁格式 DataFrame 遵循特定的结构,这使得数据分析和处理更容易。在整洁格式 DataFrame 中,每一行代表一个唯一的观测值或测量值。另一方面,列包含不同的变量或属性。

现在我们已经对宽格式和整洁格式 DataFrame 有了基本的了解,让我们深入探讨如何使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame。

探索 Pandas 的 stack() 函数

Pandas 中的 stack() 函数专门用于旋转或重塑 DataFrame。它以宽格式 DataFrame 作为输入,并通过将列堆叠到行中将其转换为整洁格式 DataFrame。此操作通常称为“堆叠”,因为它垂直堆叠列值,从而产生一个更窄、更长的 DataFrame。

现在,让我们来看一个示例场景,以演示如何使用 Pandas 中的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame。

考虑以下包含学生不同科目分数的宽格式 DataFrame

示例

import pandas as pd

# Create a sample wide dataframe
data = {
    'Name': ['Student1', 'Student2', 'Student3'],
    'Math Score': [85, 70, 95],
    'Science Score': [90, 80, 92]
}

wide_df = pd.DataFrame(data)
print("Wide DataFrame:")
print(wide_df)

输出

上述代码的宽格式 DataFrame 将如下所示

    Name          Math Score   Science Score
0  Student1          85             90
1  Student2          70             80
2  Student3          95             92

要将此宽格式 DataFrame 转换为整洁格式,我们将按照以下步骤操作

导入必要的库并加载 DataFrame

我们首先导入 Pandas 库,它为我们提供了用于转换的 stack() 函数。我们还使用 Pandas 的 DataFrame 构造函数加载宽格式 DataFrame。

示例

import pandas as pd

# Create a sample wide dataframe
data = {
    'Name': ['Student1', 'Student2', 'Student3'],
    'Math Score': [85, 70, 95],
    'Science Score': [90, 80, 92]
}

wide_df = pd.DataFrame(data)
print("Wide DataFrame:")
print(wide_df)

检查宽格式 DataFrame 并识别要堆叠的列

仔细查看宽格式 DataFrame 并识别需要堆叠的列。在我们的示例中,我们希望堆叠“数学分数”和“科学分数”列,以将其转换为单独的行。

# Inspect the wide dataframe
print("Wide DataFrame:")
print(wide_df)

宽格式 DataFrame 将如下所示

    Name        Math Score  Science Score
0  Student1          85             90
1  Student2          70             80
2  Student3          95             92

应用 stack() 函数重塑 DataFrame

现在,让我们使用 stack() 函数将宽格式 DataFrame 转换为整洁格式。我们将 stack() 函数应用于 wide_df 并将结果分配给一个新的变量 tidy_df。

# Apply the stack() function
tidy_df = wide_df.stack().reset_index()
tidy_df.columns = ['ID', 'Subject', 'Score']

讨论生成的整洁格式 DataFrame 及其结构

应用 stack() 后,我们获得了一个新的 DataFrame tidy_df,它以整洁格式表示原始的宽格式 DataFrame。整洁格式 DataFrame 有三列:“ID”、“科目”和“分数”。整洁格式 DataFrame 中的每一行对应于特定学生在特定科目中的分数。

# Display the resulting tidy dataframe
print("\nTidy DataFrame:")
print(tidy_df)

上述 DataFrame 对应的整洁格式 DataFrame 将如下所示

ID           Subject     Score
0   0      Math Score     85
1   0   Science Score      90
2   1      Math Score     70
3   1   Science Score      80
4   2      Math Score     95
5   2   Science Score      92

在生成的整洁格式 DataFrame 中,我们可以看到“ID”列表示宽格式 DataFrame 的原始行索引,“科目”列包含科目名称,“分数”列包含相应的分数。现在每一行都表示一个唯一的观测值,这使得数据分析和操作更加容易。

因此,我们已成功使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame。

结论

在本文中,我们学习了如何使用 Pandas 的 stack() 函数将宽格式 DataFrame 转换为整洁格式 DataFrame。首先,我们探讨了宽格式和整洁格式 DataFrame 之间的区别,后者更容易分析和处理。然后,我们通过一个示例场景进行了演示,在这个场景中,我们使用了 stack() 函数来转换一个包含学生不同科目分数的宽格式 DataFrame。我们还提供了有关如何应用 stack() 函数的分步指南,并展示了生成的整洁格式 DataFrame 的结构及其列。总的来说,Pandas 的 stack() 函数是用于重塑和转换 DataFrame 以满足我们的数据分析需求的宝贵工具。

更新于: 2023年7月24日

231 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.