
本文介绍如何通过命令行参数指定路径,利用 Pandas 的 pd.merge() 按唯一公共列对两个 CSV 文件执行内连接,并生成合并后的结果文件。
本文介绍如何通过命令行参数指定路径,利用 pandas 的 `pd.merge()` 按唯一公共列对两个 csv 文件执行内连接,并生成合并后的结果文件。
在数据处理中,经常需要将多个结构异构但存在关联字段的 CSV 文件进行横向合并。典型场景如:first.csv 包含字段 a,b,c,d,second.csv 包含 x,y,a,z,二者以列 a 为关联键;我们希望仅保留 a 值完全匹配的行,并输出合并后的新 CSV(如 third.csv),字段顺序为 a,b,c,d,x,y,z。
以下是一个健壮、可复用的 Python 解决方案,基于 pandas 实现:
import pandas as pd
import sys
def merge_csv_files(first_file_path, second_file_path, output_file_path):
"""
按唯一公共列对两个 CSV 文件执行内连接(inner join),并保存结果。
参数:
first_file_path (str): 第一个 CSV 文件路径
second_file_path (str): 第二个 CSV 文件路径
output_file_path (str): 合并后输出文件路径
"""
# 读取 CSV 文件
first_df = pd.read_csv(first_file_path)
second_df = pd.read_csv(second_file_path)
# 查找公共列
shared_columns = set(first_df.columns) & set(second_df.columns)
if len(shared_columns) == 0:
raise ValueError("错误:两个 CSV 文件没有公共列,请检查列名是否一致(注意大小写与空格)")
elif len(shared_columns) > 1:
raise ValueError(f"错误:检测到 {len(shared_columns)} 个公共列 {list(shared_columns)},本工具要求且仅支持恰好 1 个共享列")
shared_column = shared_columns.pop()
# 执行内连接(仅保留两表中 shared_column 值均存在的行)
merged_df = pd.merge(first_df, second_df, on=shared_column, how='inner')
# 写入结果(不保存 pandas 默认索引)
merged_df.to_csv(output_file_path, index=False)
print(f"✅ 合并完成!共 {len(merged_df)} 行匹配记录,已保存至: {output_file_path}")
# ✅ 支持命令行调用:python merge_csv.py first.csv second.csv third.csv
if __name__ == "__main__":
if len(sys.argv) != 4:
print("用法: python merge_csv.py <first.csv><second.csv><output.csv>")
sys.exit(1)
first_path, second_path, output_path = sys.argv[1], sys.argv[2], sys.argv[3]
merge_csv_files(first_path, second_path, output_path)</output.csv></second.csv></first.csv>
使用方式:
- 将上述代码保存为
merge_csv.py; - 在终端运行:
python merge_csv.py ./data/first.csv ./data/second.csv ./output/third.csv
(路径可为相对或绝对路径)
提示词大师-python版下载图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
关键说明:
- ✅ 自动识别唯一公共列:无需手动指定列名,脚本自动检测交集并校验数量;
- ✅ 严格内连接(
how='inner'):确保仅输出两文件中该列值完全匹配的行,符合“只合并共享列值相同的行”需求; - ✅ 列顺序保持自然拼接:左侧表所有列 + 右侧表非公共列(即
a,b,c,d+x,y,z),与示例third: a b c d x y z一致; - ⚠️ 注意事项:
- 列名需完全一致(区分大小写、不可含首尾空格);
- 若存在重复列名(除公共列外),
pd.merge会自动添加_x/_y后缀,建议预检查原始字段; - 大文件处理时可添加
dtype参数或分块读取优化内存,本例默认适用中小规模数据(
该方案简洁、可靠、易于集成进自动化流程,是处理多源 CSV 关联合并任务的专业级实践。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










