2017-03-02 75 views
0

我有三個CSV,我試圖合併在一起。三個CSV具有一系列不同的列,儘管所有3個列都有一組在它們之間一致的列。僅使用選定列合併CSV

我將這些列的列標題作爲字符串存儲在Python List中。這些列是我想要合併的唯一的列。


作爲一個方面說明,我試圖用一種叫做brewery庫雖然我recieving錯誤消息

'CSVDataSource' object has no attribute 'field_names' 
this thread實現一個 answer

我覺得這可以很容易地實現儘管我不確定如何去搜索每個CSV的正確列,然後只合並這些列,但使用CSV模塊。我不確定如何處理的另一個問題是確保整個合併CSV中的每列的正確定位。 IE如果columnA是第一個CSV中的第五個,然後是第二個CSV中的第四個,我將如何確保它們在合併CSV中處於相同位置?

我正在使用Python 2.7,很遺憾,無法訪問熊貓。

代碼示例:

Columns_to_Merge = ['ColumnA','ColumnB','ColumnC'] 

# CSV1 

ColumnA,ColumnB,ColumnF,ColumnC 
2,3,4,9 
8,2,5,7 
1,2,3,4 

# CSV2 

ColumnD,ColumnA,ColumnC,ColumnB,ColumnH 
2,3,4,9,12 
8,2,5,7,2 
1,2,3,4,5 

# CSV3 

ColumnH,ColumnJ,ColumnA,ColumnB,ColumnC 
2,3,4,99,12 
8,5,5,7,2 
1,55,3,70,5 
+2

請提供一個[最小工作示例](https://stackoverflow.com/help/mcve),我們可以從中開始。 – languitar

+0

您可以讀取每個csv文件的第一行並確定列的位置,即索引。知道你的位置你知道要搜索的值。 – elena

回答

0

因爲大熊貓不能用,我會用numpy的如下:

# first get all the columns of each csv file as lists 
csv1_cols = ['ColumnA','ColumnB','ColumnF','ColumnC'] 
csv2_cols = ['ColumnD','ColumnA','ColumnC','ColumnB','ColumnH'] 
csv3_cols = ['ColumnH','ColumnJ','ColumnA','ColumnB','ColumnC'] 

# then get the indices of the columns that you want to keep 
idxs_colA = [csv1_cols.index('ColumnA'), csv2_cols.index('ColumnA'), csv3_cols.index('ColumnA')] 
idxs_colB = [csv1_cols.index('ColumnB'), csv2_cols.index('ColumnB'), csv3_cols.index('ColumnB')] 
idxs_colC = [csv1_cols.index('ColumnC'), csv2_cols.index('ColumnC'), csv3_cols.index('ColumnC')] 

# get the columns as vectors and flatten them 
colA = np.array([csv1[:,idxs_colA[0]], csv2[:,idxs_colA[1]], csv3[:,idxs_colA[2]]]).flatten() 
colB = np.array([csv1[:,idxs_colB[0]], csv2[:,idxs_colB[1]], csv3[:,idxs_colB[2]]]).flatten() 
colC = np.array([csv1[:,idxs_colC[0]], csv2[:,idxs_colC[1]], csv3[:,idxs_colC[2]]]).flatten() 

# finally, create a new np array (with the cols in the order you want) 
# and transpose it 
new_csv = np.array([colA, colB, colC]).T 

相當難看,但它工作。

+0

非常感謝! 變量csv1,csv2和csv3應該是文件名到它們各自的csv的嗎? 此外,我如何接受變量'new_csv'並將其導出爲CSV文件? – Jamie2483

+0

csv1,csv2和csv3應該包含您的csv文件的數據。您可以將csv文件讀取爲numpy數組,如下所示:'csv1 = np.genfromtext('my_csv1.csv',delimiter =',')'。然後你可以寫'new_csv'到這樣的文件:'np.savetxt('my_new_csv.csv',new_csv,delimiter =',')'。 – TasosGlrs

+0

如果您的數據只是整數,您可能會發現將它們保存爲整數是有幫助的。爲此,只需在'np.savetxt()'中添加'fmt ='%i''參數即可。 – TasosGlrs