' usecols'写csv时没有工作

时间:2016-07-28 22:33:16

标签: python-2.7 csv pandas

我有两个csv文件File1和File2。我基本上修改File2以匹配File1中的列。在最后一步中,我需要截断修改后的File2,使其只有前50列。我写了这个程序。

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期间添加它时才有效。

2 个答案:

答案 0 :(得分: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列的名称。

答案 1 :(得分: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需要列名。