2016-04-22 74 views
0

這是我的情況....我有兩個CSV文件(文件1和文件2)。 File1大約有15列,file2大約有10列。我需要從file1中獲取所有15列,並從file2中僅提取第13列,並將所有16列合併到一個名爲「final.csv」的新csv文件中。請向我介紹一些有關如何使此代碼可行的想法。這是我到目前爲止...提取併合並CSV列

import csv 
    File1 = 'F:\somedata\somefolder\file1.csv' 
     File2 = 'F:\somedata\somefolder\file2.csv' 
     File3 = 'F:\\somedata\somefolder\final.csv' 
     with open('r', 'File1' and 'File2', 'rt') as f, open('r', 'File3', 'wt', newline='') as f_out: 
      headings = next(iter(csv.reader(f))) 
      csv.writer(f_out).writerow(headings) 
      csvout = csv.DictWriter(f_out, fieldnames=headings) 
      for d in csv.DictReader(f, fieldnames=headings): 
       csvout.writerow(d) 
+0

對不起,我的意思是從file2.csv第8列。 – okcken

+0

可能不是最好的方法,但快速和骯髒的方式將讀取每行到一個數組設置列號作爲索引。從索引,然後你可以抓住第13列,然後只是遍歷數組重新加入所需的,不太確定現在的代碼,但邏輯是值得評論:) –

+1

你現在有什麼問題? (除了縮進)。你應該花時間閱讀[mcve]。 –

回答

0

我會開始使用熊貓加載您的文件作爲表。然後使用索引來選擇所需的列,合併文件然後創建一個新文件。顯然你不能從file2中選擇第13列,如果它只有10列,所以在這裏我假設你在該文件中有13列。

import pandas as pd 
file1 = pd.read_table('F:\somedata\somefolder\file1.csv', delimiter=',', header=None) 
file2 = pd.read_table('F:\somedata\somefolder\file2.csv', delimiter=',', header=None) 
file2_short = file2.ix[:,12:13] 
new = pd.concat(file1, file2_short, axis=1) 
new.to_csv('F:\somedata\somefolder\newfile.csv') 

這是假設你的文件2.要列13如果該列有一個標題(當然你會刪除「標題=無」的一部分),你可以通過改爲選擇...

file2_short = file2['col_13'] 

希望這可以幫助

+0

謝謝。但有沒有辦法做到這一點,而不使用熊貓?我在安裝Pandas時遇到問題,因爲它失敗了。我做了PIP安裝熊貓,它抱怨一些未安裝的Visual C++組件。我試圖實現這一點,而不必導入外部組件,只使用Python 3當前可用的內容。 – okcken

+0

啊,這可能會稍微棘手。就我個人而言,我會通過Anaconda重新安裝整個Python軟件包,該軟件包隨熊貓和其他預先安裝的密鑰包[link](https://www.continuum.io/downloads)一起提供。否則恐怕我幫不了多少忙。 – EllieFev