2016-01-26 84 views
1

我正在尋找添加另一列到CSV文件w/python。將另一列添加到CSV文件w/python

file1的是日期.csv具有格式

ID, Date 
0,"Jan 22, 2016" 
1,"Jan 21, 2016" 
2,"Jan 20, 2016" 
3,"Jan 19, 2016" 

file2的被Price.csv

ID, Price 
0,27.89 
1,26.80 
2,26.78 
3,26.00 

我的期望的輸出是(在日期.csv)

ID, Date 
0,"Jan 22, 2016", 27.89 
1, "Jan 21, 2016", 26.80 
2, "Jan 20, 2016", 26.78 
3, "Jan 19, 2016", 26.00 

但我回來的是重複

0,27.89,27.89 
1,26.80,26.80 
2,26.78,26.78 
3,26.00,26.00 

我的程序的價格如下

import csv 

with open('C:/Users/User/OneDrive/Documents/Price.csv','r') as csvinput: 
    with open('C:/Users/User/OneDrive/Documents/Date.csv', 'w') as csvoutput: 
     writer = csv.writer(csvoutput, lineterminator='\n') 
     reader = csv.reader(csvinput) 

     all = [] 
     row = next(reader) 

     for row in reader: 
      row.append(row[1]) 
      all.append(row) 

     writer.writerows(all) 

欣賞一些指導,歡呼聲

+0

您必須從兩個文件中讀取數據,連接行並寫入新文件。最後,您可以將新文件重命名爲'Date.csv' – furas

回答

3

您不能只將一列寫入現有文件。最好的選擇是創建一個新文件。如果數據是爲了讓這兩個文件,那麼你可以簡單地壓縮起來,並寫出更新的字典出:

with open('C:/Users/User/OneDrive/Documents/Date.csv') as file1, \ 
    open('C:/Users/User/OneDrive/Documents/Price.csv') as file2, \ 
    open('C:/Users/User/OneDrive/Documents/Output.csv', 'w') as output: 
    reader1 = csv.DictReader(file1) 
    reader2 = csv.DictReader(file2) 
    writer = csv.DictWriter(output, ['ID', 'Date', 'Price']) 
    writer.writeheader() # Optional if you want the header 

    for row1, row2 in zip(reader1, reader2): 
     row1.update(row2) 
     writer.writerow(row1) 

大熊貓也有另一種選擇:

import pandas as pd 
file1 = pd.read_csv('Data.csv', index_col='ID') 
file2 = pd.read_csv('Price.csv', index_col='ID') 
pd.concat([file1,file2], axis=1).to_csv('Output.csv') 

輸出:

ID,Date,Price 
0,"Jan 22, 2016",27.89 
1,"Jan 21, 2016",26.80 
2,"Jan 20, 2016",26.78 
3,"Jan 19, 2016",26.00 
+0

非常感謝。 I [部分]與此 進口熊貓作爲PD解決的另一個方式 的file1 = pd.read_csv( 「C:/Users/User/OneDrive/Documents/Date.csv」) file2的= pd.read_csv(「C: /Users/OneDrive/Documents/Price.csv「) output = pd.concat([file1,file2],axis = 1) output.to_csv(」All.csv「) 然後刪除附加列。 – Iorek

+0

如果您設置了'index_col',您可以避免刪除pandas中的其他列 - 請參閱更新 – AChampion

3

需要3個文件在同一時間,和從第二個文件

追加只需要列
import csv 

date_reader = csv.reader(open('Date.csv', 'rb')) 
price_reader = csv.reader(open('Price.csv', 'rb')) 
writer = csv.writer(open('NewData.csv', 'wb')) 
for date_row in date_reader: 
    price_row = price_reader.next() 
    writer.writerow(date_row + [price_row[1]]) 

而輸出:

ID, Date, Price 
0,"Jan 22, 2016",27.89 
1,"Jan 21, 2016",26.80 
2,"Jan 20, 2016",26.78 
3,"Jan 19, 2016",26.00 
+0

您可以避免使用'zip'調用'.next()',例如'對於date_row,zip中的price_row(date_reader,price_reader):'。順便說一句'.next()'在Py3中不起作用,使用'next(price_reader)' – AChampion

+0

我只是稍微改了一下他的代碼,所以它確實使用'rb'和'wb'來代替 – tinySandy

+0

而不是'r'和'w'有什麼區別? – Iorek