无公共列的两个大CSV文件按索引列合并的技术需求
按索引合并两个大CSV文件
现有两个各包含200万行数据的CSV文件,结构如下:
first.csv:
h1,h2 2,3 4,5
second.csv:
h3,h4 5,6 7,8
需要按索引(行号)将两文件合并,得到如下格式的merged.csv:
h1,h2,h3,h4 2,3,5,6 4,5,7,8
以下是两种高效的实现方法:
方法一:Python pandas(跨平台,灵活可控)
如果需要后续对数据做进一步处理,或者在Windows环境下操作,推荐用pandas实现。针对大文件,可选择分块处理避免内存溢出:
常规合并(内存充足时)
import pandas as pd # 读取两个CSV文件 df1 = pd.read_csv("first.csv") df2 = pd.read_csv("second.csv") # 按行索引横向合并(axis=1表示列方向拼接) merged_df = pd.concat([df1, df2], axis=1) # 保存结果,index=False避免写入额外的索引列 merged_df.to_csv("merged.csv", index=False)
分块合并(内存紧张时)
import pandas as pd chunk_size = 100000 # 每次处理10万行,可根据内存调整 # 分块读取两个文件 chunk_reader1 = pd.read_csv("first.csv", chunksize=chunk_size) chunk_reader2 = pd.read_csv("second.csv", chunksize=chunk_size) # 先写入合并后的表头 with open("merged.csv", "w", encoding="utf-8") as f: header1 = pd.read_csv("first.csv", nrows=0).columns.tolist() header2 = pd.read_csv("second.csv", nrows=0).columns.tolist() f.write(",".join(header1 + header2) + "\n") # 逐块合并并追加写入文件 for chunk1, chunk2 in zip(chunk_reader1, chunk_reader2): merged_chunk = pd.concat([chunk1, chunk2], axis=1) merged_chunk.to_csv("merged.csv", mode="a", header=False, index=False, encoding="utf-8")
方法二:命令行paste工具(Linux/macOS,极速高效)
如果在类Unix环境下,系统自带的paste工具是处理大文件合并的最优选择,内存占用极低,速度极快:
# 用逗号作为分隔符,按行合并两个文件,输出到merged.csv paste -d ',' first.csv second.csv > merged.csv
该命令直接按行号将两个文件的对应行拼接,用逗号分隔,完美匹配需求,无需额外处理。
内容的提问来源于stack exchange,提问作者Perf2017
相关产品推荐
相关产品推荐

