2017-09-16 62 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