# 4.4.3 数据框连接
数据框连接是指把多个数据框沿行方向拼接成一张更长的表。课程使用 `pd.concat()`：`concat()` 方法用于连接多个数据框。例如，数据框 `df1` 表示一个班的部分同学的语文和数学成绩，`df2` 表示另一部分同学的成绩，现在需要将它们连接成一个数据框。导入惯例为 `import pandas as pd`。调用时第一个参数必须是数据框组成的列表，写作 `cheng = pd.concat([df1, df2], ignore_index=True)`。列表里可以放两个或更多数据框，连接顺序与列表顺序一致：先出现的表在上，后出现的表接在下面。连接生成新数据框，不修改原来的 `df1` 和 `df2`。教案将「区分合并和连接的不同用法」列为教学难点：`merge()` 按关键字横向拼列，`concat()` 把多段记录上下拼接。

课程示例中，`df1` 含学号 201、202、203 的语文与数学，`df2` 含 204、205、206 的同类成绩：`df1 = pd.DataFrame({'学号': ['201', '202', '203'], '语文': [91, 82, 93], '数学': [94, 85, 96]})`，`df2 = pd.DataFrame({'学号': ['204', '205', '206'], '语文': [95, 87, 83], '数学': [84, 75, 91]})`。执行 `cheng = pd.concat([df1, df2], ignore_index=True)` 后，新数据框列为「学号、语文、数学」，共 6 行，顺序是先 `df1` 再 `df2`：201 对应语文 91、数学 94；202 对应 82 与 85；203 对应 93 与 96；204 对应 95 与 84；205 对应 87 与 75；206 对应 83 与 91。参数 `ignore_index=True` 用于重建索引，结果行标签为连续的 0 到 5，而不是两表原来各自的 0、1、2。

同一 `concat()` 在 4.1.2 中也用于 pandas 2.x 在数据框末尾追加新行：先把新行做成数据框，再 `df = pd.concat([df, new_row])`。易错点：必须传入列表 `[df1, df2]`，不能写成 `pd.concat(df1, df2)`；`concat()` 按出现顺序上下堆叠，不按「学号」匹配，两表学号可以完全不同——若误用 `merge()` 且 `how='inner'`，本例两表学号无交集，结果会是空表；漏写 `ignore_index=True` 时不会重建索引，两段都会保留原来的 0、1、2，再用 `loc[0]` 会同时取出两行；`concat()` 不改原对象，必须接收返回值。

## 关键要点
- `concat()` 用于连接多个数据框；第一个参数是列表，如 `pd.concat([df1, df2], ignore_index=True)`。
- 课程场景：把一个班两部分同学的成绩表上下拼成一张总表。
- `ignore_index=True` 用于重建索引，结果行标签为 0、1、2…。
- 连接按列表顺序堆叠，不按关键字对齐；生成新对象，不修改原数据框。
- 与 `merge()` 不同：`merge()` 按共同列横向拼字段，`concat()` 沿行方向加长。
- pandas 2.x 追加新行也用 `concat()`：新行先做成数据框，再与原表连接。
