用Python进行AI数据分析进阶教程29:
关键词:数据透视表、pivot_table()函数、聚合函数、行索引、列索引
摘要:本文介绍了 Pandas 库中用于数据分析的重要工具——数据透视表(Pivot Table),重点讲解了 pivot_table() 函数的使用方法及其关键参数。数据透视表可以对数据进行分组、聚合和重塑,帮助用户从不同维度分析数据。文中详细说明了 values、index、columns 和 aggfunc 等核心参数的作用,并强调了合理选择行索引、列索引及聚合函数的重要性。同时,还提到了处理缺失值、数据类型和重复索引等常见问题的注意事项。最后通过一个学生分数数据的示例代码,展示了如何创建并解读数据透视表的结果,使读者能够直观理解其应用场景与实现方式。
欢迎订阅
《用Python进行AI数据分析进阶教程》专栏
《AI大模型应用实践进阶教程》专栏
《Python编程知识集锦》专栏
《字节跳动旗下AI制作抖音视频》专栏
《智能辅助驾驶》专栏
《工具软件及IT技术集锦》专栏
在 Pandas 中,数据透视表(Pivot Table)是一种非常强大的数据汇总工具,它可以对数据进行分组、聚合和重塑,帮助我们从不同的角度来分析和理解数据。下面详细介绍 Pandas 库数据透视表的使用、关键点、注意点,并通过示例进行说明。
Pandas 中使用 pivot_table() 函数来创建数据透视表,其基本语法如下:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
● data:要进行透视操作的 DataFrame。
● values:需要聚合的列名,可以是单个列名或列名列表。
● index:作为行索引的列名,可以是单个列名或列名列表。
● columns:作为列索引的列名,可以是单个列名或列名列表。
● aggfunc:聚合函数,默认为 'mean'(求平均值),也可以是其他函数,如 'sum'(求和)、'count'(计数)等,还可以传入自定义函数。
● fill_value:用于填充缺失值的值。
● margins:是否添加总计行和列,默认为 False。
● dropna:是否删除包含缺失值的列,默认为 True。
● margins_name:总计行和列的名称,默认为 'All'。
● index 决定了数据透视表的行结构,columns 决定了列结构,values 是要进行聚合计算的列。合理选择这些参数可以让我们从不同的维度查看数据。
● 根据具体需求选择合适的聚合函数,如求平均值、求和、计数等。可以传入单个函数,也可以传入多个函数组成的字典或列表。
● 使用 fill_value 参数可以指定用什么值来填充缺失值,避免在分析过程中因缺失值而产生错误。
● 进行聚合操作的列(values)的数据类型应该是数值型,否则可能会出现错误。
● 如果数据量非常大,创建数据透视表可能会占用大量内存。在这种情况下,可以考虑分块处理数据或使用其他优化方法。
● 如果 index 和 columns 组合后存在重复的索引,可能会导致结果不符合预期。需要确保数据的唯一性或使用合适的聚合函数来处理重复数据。
# 导入 pandas 库,它是 Python 中用于数据处理和分析的常用库,别名 pd 方便后续调用
import pandas as pd
# 创建示例 DataFrame
# 定义一个字典 data,用于存储数据
# 字典的键是列名,值是对应列的数据列表
data = {
# 学生姓名列,包含 Alice 和 Bob 交替出现的数据
'Name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
# 科目列,包含 Math、Science 和 English 三种科目
'Subject': ['Math', 'Math', 'Science', 'Science', 'English', 'English'],
# 分数列,对应每个学生在相应科目上的分数
'Score': [85, 90, 78, 82, 92, 88]
}
# 使用 pandas 的 DataFrame 函数将字典 data 转换为二维表格数据结构
# 存储在变量 df 中,df 是一个 DataFrame 对象
df = pd.DataFrame(data)
# 创建数据透视表
# pd.pivot_table() 是 pandas 中用于创建数据透视表的函数
# df 是要进行数据透视操作的 DataFrame 对象
# values='Score' 表示要对 'Score' 列进行聚合操作,即关注的数值列
# index='Name' 表示将 'Name' 列作为数据透视表的行索引,按学生姓名进行分组
# columns='Subject' 表示将 'Subject' 列作为数据透视表的列索引,按科目进行分组
# aggfunc='mean' 表示使用平均值作为聚合函数,计算每个学生在每个科目上的平均分数
# 最终的透视表结果存储在 pivot_table 变量中
pivot_table = pd.pivot_table(df, values='Score', index='Name', columns='Subject', aggfunc='mean')
# 打印提示信息,表明接下来要输出数据透视表的结果
print("数据透视表结果:")
# 打印数据透视表
# 输出结果是一个新的 DataFrame,行索引是学生姓名,列索引是科目
# 表格中的值是每个学生在对应科目上的平均分数
print(pivot_table)
数据透视表结果:
Subject English Math Science
Name
Alice 92.0 85.0 78.0
Bob 88.0 90.0 82.0
● 行索引 Name 有两个值 Alice 和 Bob,代表不同的学生。
● 列索引 Subject 有三个值 English、Math 和 Science,代表不同的科目。
● 表格中的数值是每个学生在对应科目上的平均分数。例如,Alice 在 English 科目上的平均分数是 92.0,在 Math 科目上是 85.0,在 Science 科目上是 78.0;Bob 在 English 科目上的平均分数是 88.0,在 Math 科目上是 90.0,在 Science 科目上是 82.0。
1、创建示例 DataFrame:
● 我们创建了一个包含学生姓名(Name)、科目(Subject)和分数(Score)的 DataFrame。
2、创建数据透视表:
● pd.pivot_table(df, values='Score', index='Name', columns='Subject', aggfunc='mean'):
○ data=df:指定要进行透视操作的 DataFrame。
○ values='Score':表示要对 Score 列进行聚合计算。
○ index='Name':将 Name 列作为行索引,即按照学生姓名进行分组。
○ columns='Subject':将 Subject 列作为列索引,即按照科目进行分组。
○ aggfunc='mean':使用平均值作为聚合函数,计算每个学生在每个科目上的平均分数。
3、打印数据透视表:
● 输出的结果是一个新的 DataFrame,行索引是学生姓名,列索引是科目,表格中的值是每个学生在对应科目上的平均分数。
数据透视表结果:
Subject English Math Science
Name
Alice 92.0 85.0 78.0
Bob 88.0 90.0 82.0
这个数据透视表清晰地展示了每个学生在不同科目上的平均分数,方便我们进行数据分析和比较。
——The END——
序号 | 专栏名称 | 说明 |
---|---|---|
1 | 用Python进行AI数据分析进阶教程 | 《用Python进行AI数据分析进阶教程》专栏 |
2 | AI大模型应用实践进阶教程 | 《AI大模型应用实践进阶教程》专栏 |
3 | Python编程知识集锦 | 《Python编程知识集锦》专栏 |
4 | 字节跳动旗下AI制作抖音视频 | 《字节跳动旗下AI制作抖音视频》专栏 |
5 | 智能辅助驾驶 | 《智能辅助驾驶》专栏 |
6 | 工具软件及IT技术集锦 | 《工具软件及IT技术集锦》专栏 |
关注我 @理工男大辉郎 获取实时更新
欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589