Python中如何按列合并两个CSV文件?求解决方法
嘿,我来帮你解决这个CSV按列合并的问题!我猜你之前的代码可能在对齐方式、行数处理或者合并方向上出了问题,下面给你两种靠谱的实现方案,分别适合不同的场景:
方案一:用Pandas快速搞定(推荐)
Pandas是处理表格类任务的神器,代码简洁还能自动处理很多细节。先确保你已经安装了它(没装的话跑pip install pandas就行),然后用下面的代码:
import pandas as pd # 读取两个CSV文件 df1 = pd.read_csv('file1.csv') df2 = pd.read_csv('file2.csv') # 按列合并(axis=1表示横向合并,也就是按列拼接) merged_df = pd.concat([df1, df2], axis=1) # 保存结果到output.csv,index=False是为了不把行索引写入文件 merged_df.to_csv('output.csv', index=False)
注意事项:
- 如果两个CSV的行数不一样,合并后行数少的那个文件对应的列会用
NaN填充缺失的行; - 如果你不是要按行索引对齐,而是想按某一列(比如共同的ID列)匹配合并,那得换成
merge方法,比如:# 假设两个文件都有一个叫"id"的主键列 merged_df = pd.merge(df1, df2, on='id') - 要是你的CSV用了非逗号分隔符(比如分号),可以在
read_csv里指定delimiter=';'。
方案二:用Python标准库csv实现(无依赖)
如果不想安装第三方库,用内置的csv模块也能实现,代码稍微繁琐一点,但完全可控:
import csv # 同时打开三个文件:两个输入,一个输出 with open('file1.csv', 'r', newline='') as f1, \ open('file2.csv', 'r', newline='') as f2, \ open('output.csv', 'w', newline='') as outfile: reader1 = csv.reader(f1) reader2 = csv.reader(f2) writer = csv.writer(outfile) # 先处理表头:把两个文件的表头合并后写入 header1 = next(reader1) header2 = next(reader2) writer.writerow(header1 + header2) # 逐行合并内容 for row1, row2 in zip(reader1, reader2): writer.writerow(row1 + row2) # 处理其中一个文件有多余行的情况:用空值填充对应列 for row in reader1: writer.writerow(row + [''] * len(header2)) for row in reader2: writer.writerow([''] * len(header1) + row)
注意事项:
- 如果你的CSV没有表头,把处理表头的两行(
header1 = next(reader1)和header2 = next(reader2))删掉就行; - 同样,如果用了非逗号分隔符,在
csv.reader和csv.writer里指定delimiter=';'即可。
你可以对照自己之前的代码看看,是不是犯了这些常见错误:比如在Pandas里用了axis=0(行合并)而不是axis=1;或者没处理行数不一致的情况;又或者用了merge而不是concat(当你不需要按主键匹配的时候)。
内容的提问来源于stack exchange,提问作者user7515829
相关产品推荐
相关产品推荐

