数据合并
目标
学会使用 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 pd
import 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 pd
import 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()
总结
通过今天的综合项目,你应该已经巩固了前 面的学习内容,包括数据读取、清洗、聚合和可视化等步骤