2017-09-16 66 views
-1

我在windows中使用python 3.0。如何逐行合并两个csv文件

我有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

所以你想把它们并排放置?我用' _array = np.genfromtxt('input_filename.csv',delimiter =',')'读取,并列出'out = np.hstack([left_array,right_array]) '然后用'np.savetxt('output_filename.csv',out,delimiter =',')'写入文件。 – Michael

+0

您也可以在'savetxt'中指定格式,请参阅文档。请注意,只有两个输入具有相同数量的行,这在您的示例数据中不是这样。请更清楚地说明你想要做什么(提出想法以及给定的输入和预期的输出)。 – Michael

回答

0

,可以串联,并与大熊猫进行排序:

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

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

df.to_csv('Output.csv', index=False) 
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 

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

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