Python数据合并案例怎么编写?

wen python案例 1

本文目录导读:

  1. 基础数据准备
  2. merge() 函数 - 数据库风格合并
  3. 多键合并
  4. concat() 函数 - 轴向连接
  5. join() 方法 - 基于索引合并
  6. 实际应用案例
  7. 处理重复列名

我来为你详细讲解Python数据合并的常见案例,主要使用pandas库。

基础数据准备

import pandas as pd
import numpy as np
# 创建示例数据
df1 = pd.DataFrame({
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 28]
})
df2 = pd.DataFrame({
    'ID': [1, 2, 3, 5],
    'Salary': [5000, 6000, 7000, 8000],
    'Department': ['IT', 'HR', 'Finance', 'Marketing']
})
print("DataFrame 1:")
print(df1)
print("\nDataFrame 2:")
print(df2)

merge() 函数 - 数据库风格合并

1 内连接 (inner join)

# 只保留匹配的行
inner_merge = pd.merge(df1, df2, on='ID', how='inner')
print("内连接结果:")
print(inner_merge)

2 左连接 (left join)

# 保留左表所有行
left_merge = pd.merge(df1, df2, on='ID', how='left')
print("左连接结果:")
print(left_merge)

3 右连接 (right join)

# 保留右表所有行
right_merge = pd.merge(df1, df2, on='ID', how='right')
print("右连接结果:")
print(right_merge)

4 外连接 (outer join)

# 保留所有行
outer_merge = pd.merge(df1, df2, on='ID', how='outer')
print("外连接结果:")
print(outer_merge)

多键合并

# 创建多键数据
df3 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Year': [2020, 2020, 2021],
    'Score': [85, 92, 78]
})
df4 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Year': [2020, 2021, 2021],
    'Grade': ['A', 'B', 'A']
})
# 多键合并
multi_key_merge = pd.merge(df3, df4, on=['ID', 'Year'], how='inner')
print("多键合并结果:")
print(multi_key_merge)

concat() 函数 - 轴向连接

1 垂直合并(添加行)

# 创建两个结构相同的DataFrame
df5 = pd.DataFrame({
    'Name': ['Eve', 'Frank'],
    'Age': [22, 27],
    'City': ['New York', 'London']
})
df6 = pd.DataFrame({
    'Name': ['Grace', 'Henry'],
    'Age': [31, 29],
    'City': ['Paris', 'Tokyo']
})
# 垂直合并
vertical_concat = pd.concat([df5, df6], axis=0, ignore_index=True)
print("垂直合并结果:")
print(vertical_concat)

2 水平合并(添加列)

# 创建两个有相同索引的DataFrame
df7 = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=[0, 1, 2])
df8 = pd.DataFrame({
    'Salary': [5000, 6000, 7000],
    'Department': ['IT', 'HR', 'Finance']
}, index=[0, 1, 2])
# 水平合并
horizontal_concat = pd.concat([df7, df8], axis=1)
print("水平合并结果:")
print(horizontal_concat)

join() 方法 - 基于索引合并

# 设置索引并合并
df9 = df1.set_index('ID')
df10 = df2.set_index('ID')
# 使用join方法
join_result = df9.join(df10, how='inner')
print("Join方法结果:")
print(join_result)

实际应用案例

案例1:销售数据分析

# 创建销售数据
orders = pd.DataFrame({
    'OrderID': range(1, 6),
    'CustomerID': [101, 102, 103, 101, 102],
    'Amount': [100, 200, 150, 300, 250],
    'Date': pd.date_range('2024-01-01', periods=5)
})
customers = pd.DataFrame({
    'CustomerID': [101, 102, 103, 104],
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
# 合并订单和客户信息
merged_sales = pd.merge(orders, customers, on='CustomerID', how='left')
print("销售数据分析结果:")
print(merged_sales)
# 按客户汇总
sales_summary = merged_sales.groupby('Name').agg({
    'Amount': ['sum', 'mean', 'count']
}).round(2)
print("\n客户销售汇总:")
print(sales_summary)

案例2:多表关联

# 创建多表数据
students = pd.DataFrame({
    'StudentID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David']
})
courses = pd.DataFrame({
    'CourseID': [101, 102, 103],
    'CourseName': ['Math', 'Physics', 'Chemistry']
})
enrollments = pd.DataFrame({
    'StudentID': [1, 1, 2, 3, 4],
    'CourseID': [101, 102, 101, 103, 102],
    'Grade': [85, 92, 78, 95, 88]
})
# 多表合并
result = students.merge(enrollments, on='StudentID') \
                 .merge(courses, on='CourseID')
print("学生选课信息:")
print(result[['Name', 'CourseName', 'Grade']])

处理重复列名

# 创建有重复列名的数据
df11 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Value': [10, 20, 30],
    'Data': ['A', 'B', 'C']
})
df12 = pd.DataFrame({
    'ID': [1, 2, 4],
    'Value': [15, 25, 35],
    'Info': ['X', 'Y', 'Z']
})
# 使用suffixes处理重复列名
merged_with_suffix = pd.merge(df11, df12, on='ID', how='outer', 
                              suffixes=('_left', '_right'))
print("处理重复列名:")
print(merged_with_suffix)
  • merge(): 适用于数据库风格的合并,基于列值
  • concat(): 适用于简单的轴向拼接
  • join(): 适用于基于索引的合并
  • 选择合适的合并方式取决于数据结构和需求

建议根据实际业务场景选择最合适的合并方法,并注意处理好重复列名、缺失值等问题。

标签: 案例编写

抱歉,评论功能暂时关闭!