如何用Python合并多个首行元素相同的CSV文件?
用Python合并首行元素相同的多个CSV文件
需求说明
现有多个CSV文件,它们的首列(键)完全一致,示例如下:
csv-1.csv: Value,0 Currency,0 datetime,0 Receiver,0 Beneficiary,0 Flag,0 idx,0 csv-2.csv: Value,0 Currency,1 datetime,0 Receiver,0 Beneficiary,0 Flag,0 idx,0
需要将这些文件合并为统一表格:首列作为公共键,后续列对应各CSV文件的取值,最终格式如下:
| left | csv-1 | csv-2 |
|---|---|---|
| Value | 0 | 0 |
| Currency | 0 | 1 |
| datetime | 0 | 0 |
| Receiver | 0 | 0 |
| Beneficiary | 0 | 0 |
| Flag | 0 | 0 |
| idx | 0 | 0 |
Python实现函数
借助pandas库可以快速实现该功能,代码如下:
import pandas as pd import os def merge_csv_files(csv_file_paths, output_path=None): # 读取第一个文件作为合并基础 merged_df = pd.read_csv( csv_file_paths[0], header=None, names=['left', os.path.basename(csv_file_paths[0])] ) # 依次合并剩余CSV文件 for file_path in csv_file_paths[1:]: df = pd.read_csv( file_path, header=None, names=['left', os.path.basename(file_path)] ) merged_df = pd.merge(merged_df, df, on='left', how='inner') # 可选:将结果保存为CSV文件 if output_path: merged_df.to_csv(output_path, index=False) return merged_df # 使用示例 if __name__ == "__main__": # 替换为你的CSV文件路径列表 target_files = ['csv-1.csv', 'csv-2.csv'] merged_result = merge_csv_files(target_files) # 打印成美观的表格格式(需先安装tabulate:pip install tabulate) print(merged_result.to_markdown(index=False))
代码说明
- 读取CSV时指定
header=None,因为原文件无表头,自定义列名为公共键left和对应文件名 - 通过
pd.merge按left列做内连接,保证所有公共键都能匹配 - 支持传入输出路径直接保存合并后的CSV,也可返回DataFrame用于后续处理
- 示例中用
to_markdown直接输出符合需求的表格样式
内容的提问来源于stack exchange,提问作者edche
相关产品推荐
相关产品推荐

