按共同列合并两个CSV文件的实现方案(Java/Python均可)
Python实现CSV基于共同列的内连接合并
直接用Python的pandas库就能快速搞定这个需求,它对CSV的合并操作支持很完善。下面是具体实现步骤和代码:
步骤说明
- 先确保安装了pandas:
pip install pandas - 编写脚本,通过命令行参数接收三个文件的路径(第一个是first.csv,第二个是second.csv,第三个是输出的third.csv)
- 自动识别两个CSV的共同列,基于这些列做内连接(只保留匹配的行)
- 按要求的列顺序输出:先保留first.csv的所有列,再追加second.csv中除共同列外的其他列
完整代码
import pandas as pd import argparse def merge_csv_files(first_path, second_path, output_path): # 读取两个CSV文件 df1 = pd.read_csv(first_path) df2 = pd.read_csv(second_path) # 找出共同列 common_cols = list(set(df1.columns) & set(df2.columns)) if not common_cols: raise ValueError("两个CSV文件没有共同列,无法匹配合并") # 执行内连接,只保留匹配的行 merged_df = pd.merge(df1, df2, on=common_cols, how='inner') # 调整列顺序:先df1的列,再df2中除共同列外的列 df2_unique_cols = [col for col in df2.columns if col not in common_cols] final_columns = df1.columns.tolist() + df2_unique_cols merged_df = merged_df[final_columns] # 保存结果到输出文件 merged_df.to_csv(output_path, index=False) if __name__ == "__main__": # 设置命令行参数解析 parser = argparse.ArgumentParser(description='基于共同列合并两个CSV文件,仅保留匹配行') parser.add_argument('first_csv', help='第一个CSV文件路径') parser.add_argument('second_csv', help='第二个CSV文件路径') parser.add_argument('output_csv', help='输出的合并后CSV文件路径') args = parser.parse_args() # 调用合并函数 merge_csv_files(args.first_csv, args.second_csv, args.output_csv)
运行方式
在命令行中执行:
python merge_csv.py ./first.csv ./second.csv ./third.csv
说明
- 脚本会自动识别两个CSV的所有共同列,基于这些列做匹配(如果有多个共同列,会同时匹配所有列的值)
- 内连接(
how='inner')确保只有在两个文件中共同列值完全匹配的行才会被保留 - 输出的列顺序严格按照需求:先first.csv的所有列(a、b、c、d),再second.csv中除共同列外的列(x、y、z)
内容的提问来源于stack exchange,提问作者Razvan Aga
相关产品推荐
相关产品推荐

