2016-07-28 68 views
0

我有兩個csv文件File1和File2。我基本上修改File2以匹配File1中的列。在最後一步中,我需要截斷修改後的File2,使其只有前50列。我寫了這個程序。'usecols'在寫入csv時不工作

import pandas as pd 
df1 = pd.read_csv('C:/Users/merged_34_final_ordered.csv', dtype = 'unicode') 
df2 = pd.read_csv('C:/Users/merged_52_raw_ip_2016_06_30.csv', dtype = 'unicode') 
df3 = df2.T.reindex(df1.columns).T 
df3['idSite'] = pd.Series([52 for x in range(len(df3.index))], index=df3.index) 
df3.to_csv('C:/Users/merged_52_raw_ip_2016_06_30_reordered.csv',usecols = list(range(50)),index=False) 

這似乎並沒有工作,因爲它不會截斷文件。只有在read_csv期間添加它纔有效。

回答

3

DataFrame.to_csv()正確的說法是columns,不usecols —後者爲pd.read_csv()。但是,@ptrj指出,to_csv()需要列名。您可以選擇前50列,呼籲他們to_csv()

df.iloc[:,:50].to_csv(filename, index=False) 

或使用@ ptrj的方法來獲取前50列的名稱。

+0

顯然,這並不需要索引我猜。因爲我得到錯誤'KeyError:'沒有[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43號決議,[44,45,46,47,48,49]]在[列]中' –

+0

在Python 2中,'range(50)'已經是一個列表,所以'list(range(50))'是一個列表包含一個包含50個元素的列表。做'columns = range(50))'而不是'columns = list(range(50)))''。 –

+0

我做了更改。還是一樣的錯誤。 –

0

一些你的代碼可以簡化爲:

df1 = pd.read_csv(...) 
df2 = pd.read_csv(...) 

df3 = df2.reindex(columns=df1.columns) 
df3['idSite'] = 52 

# names of the first 50 cols: 
cols = df3.columns[:50] 
df3.to_csv('filename', columns=cols, index=False) 

你所得到的錯誤,因爲to_csv預計列名。