2016-07-28 12 views
0

Ich habe Tow CSV-Dateien File1 und File2. Ich modifiziere File2 im Grunde so, dass es mit den Spalten in File1 übereinstimmt. Im letzten Schritt muss ich das modifizierte File2 abschneiden, um nur die ersten 50 Spalten zu haben. Ich habe dieses Programm geschrieben.'Usecols' funktioniert nicht beim Schreiben auf 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) 

Dies scheint nicht zu funktionieren, da es die Datei nicht abschneidet. Es funktioniert nur, wenn wir es während der read_csv hinzufügen.

Antwort

3

Das richtige Argument für DataFrame.to_csv() ist columns, nicht usecols — letztere für pd.read_csv() ist. Wie @ptrj jedoch angibt, erwarten Sie to_csv() Spaltennamen. Sie können die ersten 50 Spalten auswählen und to_csv() auf sie nennen,

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

oder Verwendung @ ptrj Ansatz die Namen der ersten 50 Spalten zu erhalten.

+0

Anscheinend nimmt das index ich denke nicht. Weil ich den Fehler 'KeyError:' Keine von [[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]] sind in den [columns] ' –

+0

In Python 2 ist 'range (50)' bereits eine Liste, also 'list (range (50))' ist a Liste mit einer Liste mit 50 Elementen. Do 'columns = range (50))' anstelle von 'columns = list (range (50))' '. –

+0

Ich habe die Änderungen vorgenommen. Immer noch der gleiche Fehler. –

0

können Einige Ihrer Code vereinfacht werden:

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) 

Sie erhalten den Fehler, da to_csv Spaltennamen erwartet.

Verwandte Themen