数据处理专题(七)

数据重塑

学会使用 Pandas 进行数据重塑。‍

学习内容

melt 方法

pivot 方法‍

代码示例

1. 导入 Pandas 库

import pandas as pd

2. 创建示例数据集

# 创建示例数据集(宽格式)data = {    '姓名': ['张三', '李四', '王五'],    '数学成绩': [90, 85, 92],    '英语成绩': [88, 92, 89],    '物理成绩': [95, 88, 90]}df = pd.DataFrame(data)print(f"原始数据集 (宽格式): \n{df}")

3. 使用 melt 方法

将宽格式数据转换为长格式数据

# 使用 melt 方法将宽格式数据转换为长格式数据df_melted = df.melt(id_vars='姓名', value_vars=['数学成绩', '英语成绩', '物理成绩'],                     var_name='科目', value_name='成绩')print(f"使用 melt 方法转换后的数据集 (长格式): \n{df_melted}")

指定多个 id 变量

# 创建包含多个 id 变量的示例数据集data = {    '姓名': ['张三', '李四', '王五'],    '班级': ['A班', 'B班', 'A班'],    '数学成绩': [90, 85, 92],    '英语成绩': [88, 92, 89],    '物理成绩': [95, 88, 90]}df = pd.DataFrame(data)print(f"包含多个 id 变量的原始数据集: \n{df}")# 使用 melt 方法将宽格式数据转换为长格式数据df_melted = df.melt(id_vars=['姓名', '班级'], value_vars=['数学成绩', '英语成绩', '物理成绩'],                     var_name='科目', value_name='成绩')print(f"使用 melt 方法转换后的数据集 (长格式): \n{df_melted}")

4. 使用 pivot 方法

将长格式数据转换为宽格式数据​​​​​​​

# 使用 pivot 方法将长格式数据转换为宽格式数据df_pivoted = df_melted.pivot(index='姓名', columns='科目', values='成绩')print(f"使用 pivot 方法转换后的数据集 (宽格式): \n{df_pivoted}")

保留多个值​​​​​​​

# 创建包含多个值的示例数据集data = {    '姓名': ['张三', '张三', '李四', '李四', '王五', '王五'],    '科目': ['数学成绩', '英语成绩', '数学成绩', '英语成绩', '数学成绩', '英语成绩'],    '成绩': [90, 88, 85, 92, 92, 89],    '学期': ['第一学期', '第一学期', '第一学期', '第一学期', '第一学期', '第一学期']}df_long = pd.DataFrame(data)print(f"包含多个值的长格式数据集: \n{df_long}")# 使用 pivot 方法将长格式数据转换为宽格式数据df_pivoted = df_long.pivot(index='姓名', columns='科目', values='成绩')print(f"使用 pivot 方法转换后的数据集 (宽格式): \n{df_pivoted}")

处理重复值​​​​​​​

# 创建包含重复值的示例数据集data = {    '姓名': ['张三', '张三', '李四', '李四', '王五', '王五'],    '科目': ['数学成绩', '数学成绩', '英语成绩', '英语成绩', '物理成绩', '物理成绩'],    '成绩': [90, 91, 85, 86, 92, 93]}df_long = pd.DataFrame(data)print(f"包含重复值的长格式数据集: \n{df_long}")# 使用 pivot_table 方法处理重复值df_pivoted = df_long.pivot_table(index='姓名', columns='科目', values='成绩', aggfunc='mean')print(f"使用 pivot_table 方法处理重复值后的数据集 (宽格式): \n{df_pivoted}")

 

实践

将宽格式数据转换为长格式数据。​​​​​​​

# 导入 Pandas 库import pandas as pd# 创建示例数据集(宽格式)data = {    '姓名': ['张三', '李四', '王五'],    '数学成绩': [90, 85, 92],    '英语成绩': [88, 92, 89],    '物理成绩': [95, 88, 90]}df = pd.DataFrame(data)print(f"原始数据集 (宽格式): \n{df}")# 使用 melt 方法将宽格式数据转换为长格式数据df_melted = df.melt(id_vars='姓名', value_vars=['数学成绩', '英语成绩', '物理成绩'],                     var_name='科目', value_name='成绩')print(f"使用 melt 方法转换后的数据集 (长格式): \n{df_melted}")# 使用 pivot 方法将长格式数据转换回宽格式数据df_pivoted = df_melted.pivot(index='姓名', columns='科目', values='成绩')print(f"使用 pivot 方法转换后的数据集 (宽格式): \n{df_pivoted}")# 创建包含多个值的示例数据集data = {    '姓名': ['张三', '张三', '李四', '李四', '王五', '王五'],    '科目': ['数学成绩', '英语成绩', '数学成绩', '英语成绩', '数学成绩', '英语成绩'],    '成绩': [90, 88, 85, 92, 92, 89],    '学期': ['第一学期', '第一学期', '第一学期', '第一学期', '第一学期', '第一学期']}df_long = pd.DataFrame(data)print(f"包含多个值的长格式数据集: \n{df_long}")# 使用 pivot 方法将长格式数据转换为宽格式数据df_pivoted = df_long.pivot(index='姓名', columns='科目', values='成绩')print(f"使用 pivot 方法转换后的数据集 (宽格式): \n{df_pivoted}")# 创建包含重复值的示例数据集data = {    '姓名': ['张三', '张三', '李四', '李四', '王五', '王五'],    '科目': ['数学成绩', '数学成绩', '英语成绩', '英语成绩', '物理成绩', '物理成绩'],    '成绩': [90, 91, 85, 86, 92, 93]}df_long = pd.DataFrame(data)print(f"包含重复值的长格式数据集: \n{df_long}")# 使用 pivot_table 方法处理重复值df_pivoted = df_long.pivot_table(index='姓名', columns='科目', values='成绩', aggfunc='mean')print(f"使用 pivot_table 方法处理重复值后的数据集 (宽格式): \n{df_pivoted}")

 

小结

通过今天的练习,你应该已经掌握了如何使用 Pandas 进行数据重塑,包括 melt 方法和 pivot 方法。melt 方法用于将宽格式数据转换为长格式数据,而 pivot 方法用于将长格式数据转换为宽格式数据

SQL 和 Pandas

目标

学会使用 SQL 查询 Pandas DataFrame。‍

 

学习内容

Pandas 的 query 方法

使用 SQL 语法查询 DataFrame‍

代码示例

1. 导入必要的库

import pandas as pd

2. 创建示例数据集​​​​​​​

# 创建示例数据集data = {    '姓名': ['张三', '李四', '王五', '赵六', '孙七'],    '部门': ['销售部', '市场部', '技术部', '财务部', '人力资源部'],    '销售额': [120, 150, 130, 140, 160],    '成本': [80, 90, 100, 110, 120]}df = pd.DataFrame(data)print(f"示例数据集: \n{df}")

3. 使用 query 方法

基本查询​​​​​​​

# 查询销售额大于 130 的记录df_query = df.query('销售额 > 130')print(f"查询销售额大于 130 的记录: \n{df_query}")

使用多个条件​​​​​​​

# 查询销售额大于 130 且成本小于 110 的记录df_query = df.query('销售额 > 130 and 成本 < 110')print(f"查询销售额大于 130 且成本小于 110 的记录: \n{df_query}")

使用 or 条件​​​​​​​

# 查询销售额大于 130 或成本小于 100 的记录df_query = df.query('销售额 > 130 or 成本 < 100')print(f"查询销售额大于 130 或成本小于 100 的记录: \n{df_query}")

使用 in 条件​​​​​​​

# 查询部门为 '销售部' 或 '市场部' 的记录df_query = df.query("部门 in ('销售部', '市场部')")print(f"查询部门为 '销售部' 或 '市场部' 的记录: \n{df_query}")

使用 not in 条件​​​​​​​

# 查询部门不是 '销售部' 或 '市场部' 的记录df_query = df.query("部门 not in ('销售部', '市场部')")print(f"查询部门不是 '销售部' 或 '市场部' 的记录: \n{df_query}")

使用变量​​​​​​​

# 使用变量进行查询min_sales = 130df_query = df.query('销售额 > @min_sales')print(f"查询销售额大于 {min_sales} 的记录: \n{df_query}")

使用 isin 方法​​​​​​​

# 使用 isin 方法进行查询departments = ['销售部', '市场部']df_query = df[df['部门'].isin(departments)]print(f"查询部门为 {departments} 的记录: \n{df_query}")

使用 not in 方法​​​​​​​

# 使用 not in 方法进行查询departments = ['销售部', '市场部']df_query = df[~df['部门'].isin(departments)]print(f"查询部门不是 {departments} 的记录: \n{df_query}")

 

实践

使用 SQL 语法查询 DataFrame。​​​​​​​

# 导入 Pandas 库import pandas as pd# 创建示例数据集data = {    '姓名': ['张三', '李四', '王五', '赵六', '孙七'],    '部门': ['销售部', '市场部', '技术部', '财务部', '人力资源部'],    '销售额': [120, 150, 130, 140, 160],    '成本': [80, 90, 100, 110, 120]}df = pd.DataFrame(data)print(f"示例数据集: \n{df}")# 查询销售额大于 130 的记录df_query = df.query('销售额 > 130')print(f"查询销售额大于 130 的记录: \n{df_query}")# 查询销售额大于 130 且成本小于 110 的记录df_query = df.query('销售额 > 130 and 成本 < 110')print(f"查询销售额大于 130 且成本小于 110 的记录: \n{df_query}")# 查询销售额大于 130 或成本小于 100 的记录df_query = df.query('销售额 > 130 or 成本 < 100')print(f"查询销售额大于 130 或成本小于 100 的记录: \n{df_query}")# 查询部门为 '销售部' 或 '市场部' 的记录df_query = df.query("部门 in ('销售部', '市场部')")print(f"查询部门为 '销售部' 或 '市场部' 的记录: \n{df_query}")# 查询部门不是 '销售部' 或 '市场部' 的记录df_query = df.query("部门 not in ('销售部', '市场部')")print(f"查询部门不是 '销售部' 或 '市场部' 的记录: \n{df_query}")# 使用变量进行查询min_sales = 130df_query = df.query('销售额 > @min_sales')print(f"查询销售额大于 {min_sales} 的记录: \n{df_query}")# 使用 isin 方法进行查询departments = ['销售部', '市场部']df_query = df[df['部门'].isin(departments)]print(f"查询部门为 {departments} 的记录: \n{df_query}")# 使用 not in 方法进行查询departments = ['销售部', '市场部']df_query = df[~df['部门'].isin(departments)]print(f"查询部门不是 {departments} 的记录: \n{df_query}")

 

总结

通过今天的练习,你应该已经掌握了如何使用 Pandas 的 query 方法进行类似于 SQL 的查询操作。query 方法提供了一种简洁的方式来筛选 DataFrame 中的数据,支持多种条件和逻辑运算符

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的世界你不懂

你的鼓励将是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值