一、核心前置操作:数据读取

python

运行

import pandas as pd
# 读取Excel中不同工作表
df1 = pd.read_excel('./data/表连接.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('./data/表连接.xlsx', sheet_name='Sheet2')

二、横向拼接(merge):按关联键合并列

1. 基础场景:同名列关联(一对一)

当两张表有同名且含义相同的列(如 “学号”)时,可直接合并:

python

运行

# 默认按同名列(学号)合并
newdf = pd.merge(df1, df2)
  • 效果:将df1的 “名次、姓名、学号、成绩” 与df2的 “学号、班级” 按学号拼接,生成包含所有列的新表。
  • 适用:学号与学生信息一一对应的场景。

2. 进阶场景:多对一 / 多对多关联

当一个学号对应多条记录(如一个学生有多门成绩)时,merge会自动展开:

python

运行

# 显式指定关联列(推荐,避免歧义)
newdf = pd.merge(df1, df2, on='学号')
  • 多对一:一个学号对应多条成绩记录,合并后每条成绩都会带上班级信息。
  • 多对多:一个学号在两张表中都有多条记录,合并后会生成笛卡尔积(需谨慎使用)。

3. 特殊场景:列名不同但含义相同

当关联键列名不同(如df1是 “编号”,df2是 “学号”)时,需显式指定:

python

运行

newdf = pd.merge(df1, df2, left_on='编号', right_on='学号')
  • 效果:将df1的 “编号” 与df2的 “学号” 视为同一关联键进行拼接。

4. 索引作为关联键

当关联键是 DataFrame 的索引时,可直接用索引合并:

python

运行

# 将列设为索引
df1 = df1.set_index('编号')
df2 = df2.set_index('学号')

# 按索引合并
newdf = pd.merge(df1, df2, left_index=True, right_index=True)
  • 优势:索引查询速度更快,适合大数据量场景。

三、表连接方式(how参数)

mergehow参数决定了数据的保留策略,共 4 种核心方式:

表格

连接方式参数值核心逻辑适用场景
内连接inner只保留两张表中都存在的关联键数据取交集,过滤不匹配数据
左连接left保留左表(df1)的所有数据,右表(df2)中无匹配的填NaN以左表为主,补充右表信息
右连接right保留右表(df2)的所有数据,左表(df1)中无匹配的填NaN以右表为主,补充左表信息
外连接outer保留两张表的所有数据,无匹配的填NaN取并集,查看所有数据

示例代码

python

运行

# 内连接(默认)
inner_df = pd.merge(df1, df2, on='学号', how='inner')

# 左连接
left_df = pd.merge(df1, df2, on='学号', how='left')

# 右连接
right_df = pd.merge(df1, df2, on='学号', how='right')

# 外连接
outer_df = pd.merge(df1, df2, on='学号', how='outer')

四、处理重复列名

当两张表有同名非关联列时,merge会自动添加后缀区分,也可自定义:

python

运行

# 自定义后缀
newdf = pd.merge(df1, df2, on='学号', how='outer', suffixes=('_L', '_R'))

# 重命名列(可选)
newdf = newdf.rename(columns={'姓名_L': '姓名'})
  • 效果:将df1的 “姓名” 重命名为 “姓名_L”,df2的 “姓名” 重命名为 “姓名_R”,避免混淆。

五、纵向拼接(concat):按行合并

当两张表列名完全相同,需要将数据上下堆叠时,使用concat

python

运行

# 纵向拼接,忽略原索引
newdf = pd.concat([df1, df2], ignore_index=True)
  • 效果:将df2的行追加到df1下方,生成行数更多的新表。
  • 注意:列名必须一致,否则会产生大量NaN

六、核心总结(新手必记)

  1. 横向拼接(merge):按关联键合并列,核心是on/left_on/right_on指定关联关系,how指定数据保留策略。
  2. 纵向拼接(concat):按行合并,核心是列名一致,ignore_index=True重置索引。
  3. 函数选择技巧:需要按关联键整合不同维度信息用merge,需要堆叠相同结构数据用concat
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐