2016-10-25 27 views
1

新しい列ヘッダーと値をPythonで既存のcsvファイルに追加しようとしています。私が調べたすべてのものが、最後の列の最後の行にヘッダーを追加します。これは私の結果が本質的に欲しいものです。Pythonを使用して既存のCSVファイルに列を追加

Header Header2 Header3 NewHeader Value Value2 Value3 NewValue

私は、現在取得していますが、このです:

Header Header2 Header3 
Value Value2 Value3**NewHeader 
NewValue` 

これは私のコードです:

import csv 
    with open('filename.csv', 'a') as csvfile: 
    fieldnames = ['pageviewid'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'pageviewid': 'Baked'}) 
    writer.writerow({'pageviewid': 'Lovely'}) 
    writer.writerow({'pageviewid': 'Wonderful'}) 
+1

「with」文のインデント後の行の少なくとも一部がインデントされていませんか? –

+0

列を追加するには、すべてのcsvをメモリに読み込み、メモリに列を追加して、すべてのファイルを再度保存する必要があります。 '' a''は 'append'を意味しますが、ファイルの末尾にのみ追加できます。 – furas

答えて

1

最も簡単な方法は、出力ファイル

に書き換えることであろう
import csv 
reader = csv.reader(open('filename.csv', 'rb')) 
writer = csv.writer(open('output.csv', 'w')) 
headers = reader.next() 
headers.append("Brand New Awesome Header") 
writer.write(headers) 
for row in reader: 
    row.append(new data for my new header) 
    writer.write(row) 
+0

バイナリモードでテキストファイルを読む必要はありません。 'rb'モードのもう一つの理由はありますか?そうでなければ良い答えです。 – WombatPM

+0

@Chris Kenyon私は 'writer.write'ではなく' writer.writerow'を意味すると思います。 – oba2311

2

パンダを使用している場合:

import pandas as pd 
df = pd.read_csv('filename.csv') 
new_column = pd.DataFrame({'new_header': ['new_value_1', 'new_value_2', 'new_value_3']}) 
df = df.merge(new_column, left_index = True, right_index = True) 
df.to_csv('filename.csv') 
+0

このメソッドを使用すると、新しい列がデータの左側に追加されます。コードの残りの部分は、この列を取り除く方法を知っていますか?それはおそらくリストのインデックスを列挙するので、0からリストの終わりに始まります。 – duldi

関連する問題