如何逐行合并两个csv文件

时间:2017-09-16 10:34:51

标签: python csv

我在Windows中使用python 3.0。

我有2个csv文件

file1.csv

0, 10,12
0,11,12
1,15,12
2, 17,12

file2.csv

0, 2, 1
1,22, 1
3, 11, 1

output.csv

0, 10,12
0,11,12
0, 2, 1
1,15,12
1,22, 1
2, 17,12
3, 11, 1

我尝试了以下代码

a = pd.read_csv('file1.csv')
b = pd.read_csv('file2.csv')
c = pd.concat([a, b], join='outer')
c.to_csv("Output.csv", index = False)

但我的输出是

0, 10,12
0,11,12
1,15,12
2, 17,12
0, 2, 1
1,22, 1
3, 11, 1

请你给我一些指示。我是python的新手。

2 个答案:

答案 0 :(得分:1)

您可以使用pandas连接和排序它们:

df = pd.concat([a, b]).astype('str')

df = df.sort_values(list(df.columns))

df.to_csv('Output.csv', index=False)

答案 1 :(得分:0)

这不会创建输出文件,但会演示heapq.merge如何提供帮助:

from heapq import merge
inputs = [file(f) for f in ['file1.csv', 'file2.csv']]
for line in merge(*inputs):
    print line,

使用样本数据生成

0, 10,12
0, 2, 1
0,11,12
1,15,12
1,22, 1
2, 17,12
3, 11, 1

然而,这与初始行的排序中的样本输出不同:

0, 10,12
0,11,12
0, 2, 1

但我不确定如何产生这种排序。示例输出行似乎没有按字符或数字列排序(字段的数字排序可能会先放置0, 2, 1。)

编辑:看起来行的排序就像空格不存在一样。以下示例:

from heapq import merge
def reader(f):
    for line in file(f):
        yield line.replace(' ',''), line
inputs = [reader(f) for f in ['file1.csv', 'file2.csv']]
for pair in merge(*inputs):
    print pair[1],

生成此排序:

0, 10,12
0,11,12
0, 2, 1
1,15,12
1,22, 1
2, 17,12
3, 11, 1