2015-10-29 19 views
5

Ho un file csv, è possibile avere usecols prendere tutte le colonne tranne l'ultima quando si utilizza read_csv senza elencare ogni colonna necessaria.panda usa tutti tranne l'ultimo

Ad esempio, se ho un file di 13 colonne, posso fare usecols=[0,1,...,10,11]. Fare usecols=[:-1] mi darà errore di sintassi?

C'è un'altra alternativa? Sto usando pandas 0.17

+0

Perché non basta leggere in una sola riga, ottenere l'elenco delle colonne e quindi rilasciare l'ultima voce? – EdChum

risposta

4

Si può solo leggere una singola linea utilizzando nrows=1 per ottenere i colli e poi rileggere nel pieno csv saltare l'ultima col tagliando la matrice colonna dalla prima lettura:

cols = pd.read_csv(file, nrows=1).columns 
df = pd.read_csv(file, usecols=cols[:-1]) 
+0

È l'unica alternativa? Sembra che dovrò aggiungere una linea per ogni file. La maggior parte ha colonne variabili, quindi non posso usare la stessa variabile 'cols'. – Leb

+0

Non che io possa pensare, hai sempre bisogno di analizzare il csv inizialmente e da quella analisi puoi quindi determinare dinamicamente quali colonne usare, questo non è qualcosa che è incorporato in – EdChum

+0

Grazie, un'ultima domanda. Perché dà errore di sintassi quando si esegue 'usecols = [: - 1]'. Proviene da Python o Panda? – Leb

1

A partire dalla versione 0.20 il metodo usecols in panda accetta un filtro richiamabile, ovvero un'espressione lambda. Quindi se si conosce il nome della colonna che si desidera saltare si può fare come segue:

columns_to_skip = ['foo','bar'] 
df = pd.read_csv(file, usecols=lambda x: x not in columns_to_skip) 

Ecco la documentazione reference.

Problemi correlati