本文目录导读:

- merge() - 类似SQL的Join操作
- join() - 基于索引的连接
- concat() - 纵向或横向拼接
- append() - 追加数据(已弃用,推荐concat)
- 实战案例:员工数据综合分析
- 数据连接后的处理技巧
我来详细介绍Pandas中几种常用的数据连接函数和案例:
merge() - 类似SQL的Join操作
基础连接
import pandas as pd
# 创建示例数据
df1 = pd.DataFrame({
'ID': [1, 2, 3, 4],
'姓名': ['张三', '李四', '王五', '赵六'],
'部门': ['技术部', '市场部', '技术部', '财务部']
})
df2 = pd.DataFrame({
'ID': [1, 2, 3, 5],
'工资': [8000, 9000, 7500, 8500],
'入职日期': ['2021-01-15', '2020-06-01', '2022-03-10', '2021-11-20']
})
# 内连接(默认)
inner_join = pd.merge(df1, df2, on='ID', how='inner')
print("内连接结果:")
print(inner_join)
不同类型的连接
# 左连接
left_join = pd.merge(df1, df2, on='ID', how='left')
print("\n左连接结果:")
print(left_join)
# 右连接
right_join = pd.merge(df1, df2, on='ID', how='right')
print("\n右连接结果:")
print(right_join)
# 外连接(全连接)
outer_join = pd.merge(df1, df2, on='ID', how='outer')
print("\n外连接结果:")
print(outer_join)
多键连接
df3 = pd.DataFrame({
'ID': [1, 2, 3],
'部门': ['技术部', '市场部', '技术部'],
'项目': ['项目A', '项目B', '项目C']
})
df4 = pd.DataFrame({
'ID': [1, 2, 3],
'部门': ['技术部', '市场部', '财务部'],
'预算': [100000, 80000, 120000]
})
# 多键连接
multi_join = pd.merge(df3, df4, on=['ID', '部门'], how='inner')
print("多键连接结果:")
print(multi_join)
join() - 基于索引的连接
# 创建基于索引的数据
df5 = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28]
}, index=['A', 'B', 'C'])
df6 = pd.DataFrame({
'工资': [8000, 9000, 7500],
'城市': ['北京', '上海', '广州']
}, index=['A', 'B', 'D'])
# 默认左连接
join_result = df5.join(df6, how='left')
print("索引左连接:")
print(join_result)
# 添加前缀区分重复列名
df5_renamed = df5.join(df6, how='inner', lsuffix='_左', rsuffix='_右')
print("\n带前缀的连接:")
print(df5_renamed)
concat() - 纵向或横向拼接
# 纵向拼接(追加行)
df7 = pd.DataFrame({
'姓名': ['张三', '李四'],
'年龄': [25, 30]
})
df8 = pd.DataFrame({
'姓名': ['王五', '赵六'],
'年龄': [28, 35]
})
concat_rows = pd.concat([df7, df8], axis=0, ignore_index=True)
print("纵向拼接:")
print(concat_rows)
# 横向拼接(增加列)
df9 = pd.DataFrame({
'工资': [8000, 9000]
})
concat_cols = pd.concat([df7, df9], axis=1)
print("\n横向拼接:")
print(concat_cols)
append() - 追加数据(已弃用,推荐concat)
# 使用concat替代append
df10 = pd.DataFrame({
'姓名': ['钱七'],
'年龄': [32]
})
# 避免使用append,改用concat
result = pd.concat([df7, df10], ignore_index=True)
print("使用concat追加:")
print(result)
实战案例:员工数据综合分析
# 复杂的多表连接案例
# 员工基本信息
employees = pd.DataFrame({
'emp_id': [1001, 1002, 1003, 1004],
'name': ['张三', '李四', '王五', '赵六'],
'dept_id': [1, 2, 1, 3],
'salary': [8000, 9000, 7500, 8500]
})
# 部门信息
departments = pd.DataFrame({
'dept_id': [1, 2, 3, 4],
'dept_name': ['技术部', '市场部', '财务部', '人事部'],
'location': ['北京', '上海', '广州', '深圳']
})
# 项目信息
projects = pd.DataFrame({
'emp_id': [1001, 1002, 1003, 1005],
'project_name': ['项目A', '项目B', '项目C', '项目D'],
'project_budget': [100000, 80000, 120000, 90000]
})
# 链式多表连接
result = (employees
.merge(departments, on='dept_id', how='left') # 添加部门信息
.merge(projects, on='emp_id', how='left') # 添加项目信息
.fillna({'project_name': '无项目', 'project_budget': 0}) # 填充空值
)
print("员工综合分析结果:")
print(result)
数据连接后的处理技巧
# 处理重复列名
df_a = pd.DataFrame({
'key': [1, 2, 3],
'value': ['A', 'B', 'C'],
'col_a': ['x', 'y', 'z']
})
df_b = pd.DataFrame({
'key': [1, 2, 4],
'value': ['D', 'E', 'F'],
'col_b': ['p', 'q', 'r']
})
# 使用suffixes处理重复列名
merged = pd.merge(df_a, df_b, on='key', how='outer',
suffixes=['_表1', '_表2'])
print("处理重复列名:")
print(merged)
# 删除重复列
# 只保留需要的列
merged_clean = merged[['key', 'value_表1', 'col_a', 'col_b']]
print("\n清理后的数据:")
print(merged_clean)
这些就是Pandas中最常用的数据连接函数,通过组合使用这些函数,可以灵活地处理各种数据连接需求,建议根据具体的数据结构和业务需求选择最适合的连接方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播