数据处理专题(五)

数据合并

目标

学会使用 Pandas 合并多个数据集。‍

学习内容

concat 方法

merge 方法‍

代码示例

1. 导入 Pandas 库

import pandas as pd

2. 创建示例数据集

# 创建第一个数据集data1 = {    '姓名': ['张三', '李四', '王五'],    '部门': ['销售部', '市场部', '技术部'],    '销售额': [120, 150, 130]}df1 = pd.DataFrame(data1)print(f"第一个数据集: \n{df1}")# 创建第二个数据集data2 = {    '姓名': ['赵六', '孙七', '周八'],    '部门': ['财务部', '人力资源部', '销售部'],    '销售额': [140, 160, 170]}df2 = pd.DataFrame(data2)print(f"第二个数据集: \n{df2}")

3. 使用 concat 方法

按行合并

# 按行合并两个数据集df_concat_rows = pd.concat([df1, df2])print(f"按行合并后的数据集: \n{df_concat_rows}")

按列合并

# 创建第三个数据集,包含不同的列data3 = {    '姓名': ['张三', '李四', '王五'],    '成本': [80, 90, 100]}df3 = pd.DataFrame(data3)print(f"第三个数据集: \n{df3}")# 按列合并两个数据集df_concat_cols = pd.concat([df1, df3], axis=1)print(f"按列合并后的数据集: \n{df_concat_cols}")

指定索引合并

# 按行合并并指定索引df_concat_index = pd.concat([df1, df2], ignore_index=True)print(f"按行合并并指定索引后的数据集: \n{df_concat_index}")

4. 使用 merge 方法

内连接​​​​​​​

# 内连接两个数据集df_merge_inner = pd.merge(df1, df2, on='姓名', how='inner')print(f"内连接后的数据集: \n{df_merge_inner}")

左连接​​​​​​​

# 左连接两个数据集df_merge_left = pd.merge(df1, df2, on='姓名', how='left')print(f"左连接后的数据集: \n{df_merge_left}")

右连接

# 右连接两个数据集

df_merge_right = pd.merge(df1, df2, on='姓名', how='right')

print(f"右连接后的数据集: \n{df_merge_right}")

外连接​​​​​​​

# 外连接两个数据集df_merge_outer = pd.merge(df1, df2, on='姓名', how='outer')print(f"外连接后的数据集: \n{df_merge_outer}")

指定多个键合并​​​​​​​

# 创建包含多个键的数据集data4 = {    '姓名': ['张三', '李四', '王五'],    '部门': ['销售部', '市场部', '技术部'],    '成本': [80, 90, 100]}df4 = pd.DataFrame(data4)print(f"第四个数据集: \n{df4}")# 指定多个键合并df_merge_multi_key = pd.merge(df1, df4, on=['姓名', '部门'], how='inner')print(f"指定多个键合并后的数据集: \n{df_merge_multi_key}")

实践

合并两个包含相同列的数据集。​​​​​​​

# 导入 Pandas 库import pandas as pd# 创建第一个数据集data1 = {    '姓名': ['张三', '李四', '王五'],    '部门': ['销售部', '市场部', '技术部'],    '销售额': [120, 150, 130]}df1 = pd.DataFrame(data1)print(f"第一个数据集: \n{df1}")# 创建第二个数据集data2 = {    '姓名': ['赵六', '孙七', '周八'],    '部门': ['财务部', '人力资源部', '销售部'],    '销售额': [140, 160, 170]}df2 = pd.DataFrame(data2)print(f"第二个数据集: \n{df2}")# 按行合并两个数据集df_concat_rows = pd.concat([df1, df2])print(f"按行合并后的数据集: \n{df_concat_rows}")# 内连接两个数据集df_merge_inner = pd.merge(df1, df2, on='姓名', how='inner')print(f"内连接后的数据集: \n{df_merge_inner}")# 左连接两个数据集df_merge_left = pd.merge(df1, df2, on='姓名', how='left')print(f"左连接后的数据集: \n{df_merge_left}")# 右连接两个数据集df_merge_right = pd.merge(df1, df2, on='姓名', how='right')print(f"右连接后的数据集: \n{df_merge_right}")# 外连接两个数据集df_merge_outer = pd.merge(df1, df2, on='姓名', how='outer')print(f"外连接后的数据集: \n{df_merge_outer}")

小结

通过今天的练习,你应该已经掌握了如何使用 Pandas 进行数据合并,包括使用 concat 方法和 merge 方法。

复习和练习

目标

巩固前面的学习内容。‍

学习内容

复习所有知识点

实践:完成一个综合项目‍

综合项目

假设我们有一个包含销售数据的 CSV 文件,我们需要完成以下任务:

读取 CSV 文件

清洗数据(处理缺失值和重复行)

按部门分组并计算每组的销售额均值

绘制销售额的折线图和柱状图‍

代码示例

1. 导入必要的库​​​​​​​

import pandas as pdimport matplotlib.pyplot as plt

2. 读取 CSV 文件​​​​​​​

# 读取 CSV 文件file_path = 'sales_data.csv'df = pd.read_csv(file_path)print(f"原始数据集: \n{df.head()}")

3. 清洗数据

检查缺失值​​​​​​​

# 检查每列的缺失值数量missing_values = df.isnull().sum()print(f"每列的缺失值数量: \n{missing_values}")

删除含有缺失值的行​​​​​​​

# 删除含有缺失值的行df_cleaned = df.dropna()print(f"删除缺失值后的数据集: \n{df_cleaned.head()}")

检查重复行​​​​​​​

# 检查重复行duplicates = df_cleaned.duplicated()print(f"重复行: \n{duplicates}")

删除重复行​​​​​​​

# 删除重复行df_no_duplicates = df_cleaned.drop_duplicates()print(f"删除重复行后的数据集: \n{df_no_duplicates.head()}")

4. 按部门分组并计算每组的销售额均值​​​​​​​

# 按 '部门' 列分组grouped_by_department = df_no_duplicates.groupby('部门')# 计算每组的销售额均值mean_sales_by_department = grouped_by_department['销售额'].mean()print(f"按 '部门' 列分组后,每组的销售额均值: \n{mean_sales_by_department}")

5. 绘制销售额的折线图​​​​​​​

# 绘制折线图plt.figure(figsize=(10, 6))plt.plot(mean_sales_by_department.index, mean_sales_by_department.values, marker='o', linestyle='-', color='b', label='销售额均值')plt.xlabel('部门')plt.ylabel('销售额均值 (万元)')plt.title('各部门销售额均值折线图')plt.legend()plt.grid(True)plt.show()

6. 绘制销售额的柱状图​​​​​​​

# 绘制柱状图plt.figure(figsize=(10, 6))plt.bar(mean_sales_by_department.index, mean_sales_by_department.values, color='b')plt.xlabel('部门')plt.ylabel('销售额均值 (万元)')plt.title('各部门销售额均值柱状图')plt.grid(True)plt.show()

完整代码

# 导入必要的库import pandas as pdimport matplotlib.pyplot as plt# 读取 CSV 文件file_path = 'sales_data.csv'df = pd.read_csv(file_path)print(f"原始数据集: \n{df.head()}")# 检查每列的缺失值数量missing_values = df.isnull().sum()print(f"每列的缺失值数量: \n{missing_values}")# 删除含有缺失值的行df_cleaned = df.dropna()print(f"删除缺失值后的数据集: \n{df_cleaned.head()}")# 检查重复行duplicates = df_cleaned.duplicated()print(f"重复行: \n{duplicates}")# 删除重复行df_no_duplicates = df_cleaned.drop_duplicates()print(f"删除重复行后的数据集: \n{df_no_duplicates.head()}")# 按 '部门' 列分组grouped_by_department = df_no_duplicates.groupby('部门')# 计算每组的销售额均值mean_sales_by_department = grouped_by_department['销售额'].mean()print(f"按 '部门' 列分组后,每组的销售额均值: \n{mean_sales_by_department}")# 绘制折线图plt.figure(figsize=(10, 6))plt.plot(mean_sales_by_department.index, mean_sales_by_department.values, marker='o', linestyle='-', color='b', label='销售额均值')plt.xlabel('部门')plt.ylabel('销售额均值 (万元)')plt.title('各部门销售额均值折线图')plt.legend()plt.grid(True)plt.show()# 绘制柱状图plt.figure(figsize=(10, 6))plt.bar(mean_sales_by_department.index, mean_sales_by_department.values, color='b')plt.xlabel('部门')plt.ylabel('销售额均值 (万元)')plt.title('各部门销售额均值柱状图')plt.grid(True)plt.show()

总结

通过今天的综合项目,你应该已经巩固了前 面的学习内容,包括数据读取、清洗、聚合和可视化等步骤

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员的世界你不懂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值