用 pd.concat(..., axis=0) 按行拼接。默认外连接保留各表列的并集,缺失字段留空。只需要共同列时使用 join="inner"。

准备两张字段不同的表
示例中两批数据都有 id,另外分别有 score 和 grade。
import pandas as pd
first = pd.DataFrame({"id": ["001", "002"], "score": [90, 85]})
second = pd.DataFrame({"id": ["003"], "grade": ["A"]})
tables = {"first": first, "second": second}

读取 CSV 时可以提前指定 id 的字符串类型,保留前导零。
先查必需字段,再标记来源后拼接
将以下代码追加到同一脚本。
pieces = []
for name, frame in tables.items():
if "id" not in frame.columns:
raise ValueError(f"{name}: missing id")
pieces.append(frame.assign(source=name))
combined = pd.concat(pieces, axis=0, join="outer", ignore_index=True)
print(combined)
结果为 3 行,score 缺 1 项,grade 缺 2 项。source 可以用来追溯每行来自哪张表。
对照列交集和缺失值
继续运行以下断言。
assert combined["score"].isna().sum() == 1 assert combined["grade"].isna().sum() == 2 shared = pd.concat(pieces, join="inner", ignore_index=True) assert list(shared.columns) == ["id", "source"]
拼接会保留全部输入行。若要去重,需要另外定义唯一键和保留规则。










