如何用Python合并两个CSV文件的列并生成新CSV?代码问题排查
解决CSV文件列横向合并问题
问题根源
你当前的核心问题是误用了pd.merge()——这个方法是按共同字段关联两个数据集(比如用id匹配行),但你需要的是直接把两个CSV的列横向拼接在一起。同时你的CSV保存代码也存在错误。
正确实现方案
方法一:用Pandas的concat(推荐,简洁高效)
直接横向拼接两个DataFrame,完全匹配你的需求:
import pandas as pd def merge_csv(): # 读取两个CSV文件 data1 = pd.read_csv('C:/folder/csv1.csv') data2 = pd.read_csv('C:/folder/csv2.csv') # axis=1 指定按列横向拼接 merged_data = pd.concat([data1, data2], axis=1) # 打印结果确认 print(merged_data) # 保存合并后的CSV,index=False 避免生成多余的索引列 merged_data.to_csv('C:/folder/merged.csv', index=False) merge_csv()
方法二:用Python标准库csv(无需依赖Pandas)
如果不想用Pandas,可通过逐行读取合并的方式实现:
import csv def merge_csv(): # 读取两个CSV的内容 with open('C:/folder/csv1.csv', 'r') as f1, open('C:/folder/csv2.csv', 'r') as f2: reader1 = csv.reader(f1) reader2 = csv.reader(f2) # 获取表头和数据行 header1 = next(reader1) header2 = next(reader2) rows1 = list(reader1) rows2 = list(reader2) # 合并表头与每行数据 merged_header = header1 + header2 merged_rows = [row1 + row2 for row1, row2 in zip(rows1, rows2)] # 写入合并后的CSV with open('C:/folder/merged.csv', 'w', newline='') as outfile: writer = csv.writer(outfile) writer.writerow(merged_header) writer.writerows(merged_rows) merge_csv()
原代码错误说明
pd.merge()误用:你的两个CSV没有共同字段,merge会默认尝试找相同列名做匹配,最终生成的结果不符合横向拼列的需求;- 保存代码问题:
- 第一个
to_csv写法基本正确,但缺少index=False会导致CSV多一列索引; - 第二个
csv.DictWriter的用法错误:output4是Pandas的DataFrame,不能直接传给writerows,需要先转成字典列表(如merged_data.to_dict('records')),但这种方法完全没必要,不如直接用Pandas的to_csv更简便。
- 第一个
效果验证
用你提供的示例文件:
csv1内容:
id,name 1,abc
csv2内容:
dept,location cse,xyz
运行代码后生成的merged.csv内容:
id,name,dept,location 1,abc,cse,xyz
内容的提问来源于stack exchange,提问作者Mia
相关产品推荐
相关产品推荐

