2017-09-16 50 views
-1

私はWindowsでpython 3.0を使用しています。2つのcsvファイルを1行ずつマージする方法

iは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の順序が異なりますnes:

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

しかし、私はこの注文をどのように生成するかはわかりません。サンプル出力行は、文字列または数値列によって順序付けされていないようです(フィールドの数値順は、おそらく0, 2, 1となります)。

EDIT:行がスペースがないように並べられているように見えます。次の例:

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 
関連する問題