如何实现两个CSV文件的横向列合并而非行追加?
解决CSV横向按行匹配合并的问题
我懂你现在的困扰——本来想把两个CSV的列横向对应行合并成包含Num和Num2的新文件,结果操作变成了把一个文件的内容追加到另一个下面。下面给你两种实用的解决办法:
方法1:使用Python原生csv模块(无需额外安装库)
如果不想安装第三方库,用Python自带的csv模块就能实现,核心思路是同步读取两个文件的每一行,把对应行的内容合并后写入新文件:
import csv # 替换成你的实际文件路径 input_paths = ["File1.csv", "File2.csv"] output_path = "File3.csv" # 同时打开三个文件进行读写操作 with open(input_paths[0], 'r', newline='') as file1, \ open(input_paths[1], 'r', newline='') as file2, \ open(output_path, 'w', newline='') as file3: # 用DictReader读取,方便按列名处理 reader1 = csv.DictReader(file1) reader2 = csv.DictReader(file2) # 定义输出文件的列名:合并两个文件的列 output_fieldnames = reader1.fieldnames + reader2.fieldnames writer = csv.DictWriter(file3, fieldnames=output_fieldnames) # 写入表头 writer.writeheader() # 同步遍历两个文件的行,合并后写入 for row_from_file1, row_from_file2 in zip(reader1, reader2): # 合并两行的字典数据 merged_row = {**row_from_file1, **row_from_file2} writer.writerow(merged_row)
说明:
- 用
zip同步遍历两个文件的行,确保每行是一一对应的 - 如果两个文件行数不一致,
zip会以行数较少的那个文件为准,超出的行不会被处理 - 这种方法不需要额外安装依赖,适合轻量场景
方法2:使用Pandas库(更简洁高效)
如果经常处理CSV数据,Pandas会让操作更简单,几行代码就能完成横向合并:
import pandas as pd # 读取两个CSV文件 df1 = pd.read_csv("File1.csv") df2 = pd.read_csv("File2.csv") # 横向合并(按行索引对齐,对应行匹配) merged_df = pd.concat([df1, df2], axis=1) # 写入新CSV,index=False表示不写入行索引 merged_df.to_csv("File3.csv", index=False)
说明:
axis=1参数指定横向合并,默认按行索引对齐,正好符合你要的“对应行数值一一匹配”的需求- 如果两个文件行数不一致,缺失的行会自动填充
NaN,你可以用merged_df.dropna()删除缺失行,或者用fillna()填充默认值 - 注意:如果两个文件有重复的列名,合并后会自动添加后缀区分(比如
Num和Num.1),你的场景里列名是Num和Num2,不会有这个问题
内容的提问来源于stack exchange,提问作者user5458635
相关产品推荐
相关产品推荐

